現実的には,段落開始時には和文処理グルーが入らないような JFM を使うことが多いと思うので, 必要性はさほど高いわけではないかもしれませんが,commit 94f90a7 で,とりあえずの解決策をいれてみました.
方針は,垂直モードで \inhibitglue が発行されたら,\everypar の値をいじって, 水平モードに移行時に(\inhibitglue を表している)whatsit の挿入処理をおこなう,というものです.
この方法だと,「次段落開始時」に効力が発生するので,
\par\inhibitglue\hrule あのような場合でも効力が発生することになります.マニュアルに明示しておけばこれは許されるかな?
これもひとまず完了としておきましょう.もっとうまい案があったりしたら再オープンということで.
状況を説明するため,次のソースを考えます:
%\input luatexja.sty \def\stat{\ifvmode\message{V }\else\message{H }\fi} \stat\inhibitglue\stat \endこれを pTeX で実行すると,「V V 」と出ます.つまり,\inhibitglue 実行後でも垂直モードのままです.しかし,LuaTeX で(最初のコメント行は外す)実行すると,「V H 」と出ます. つまり,\inhibitglue 実行時には,自動的に水平モードになります. LuaTeX-ja では,\inhibitglue の指定は,水平リストに whatsit node を追加することによって行っているため,現在のリストが水平モードになっていないといけないからです.
そのため,この現在の実装では,例えば
のような入力で,空行が生まれるという症状が発生してしまいます. 「\inhibitglue では水平モードになる」ことを仕様として固定化させるのもなくはないですが,それでは不自然です. やはり pTeX のように,\inhibitglue 実行後でも垂直モードは垂直モードのまま,という挙動が期待されます.さて,この挙動はどうやればシンプルに実現できるのでしょうか? こちらでも考えてみますが,何か良い案がありましたらお願いします.