とりあえず commit 95df0b7 で,whatsit 利用の方法で直したつもりです.
しかし,解析中に
あああ \inhibitglue\paragraph{hoge}という入力で,一行余計な空白ができるというバグを見つけました.この「余計な一行」は,\inhibitglue 由来の whatsit node によるもののようですが,なんとかならないかと悩んでいます.
一行余計な空白ができるというバグ
これって
\inhibitglue \par (あ)いで \inhibitglue が〈(〉に「付いている」ことにならないということですね? これは妥当のような気がしますが。
確かに、「\paragraph{(あ)い} でその場の出力では〈(〉に \inhibitglue を効かせたい」 というパターンを救済する必要はあるのでしょうけど。
\inhibitglue \par (あ)い
で \inhibitglue が〈(〉に「付いている」ことにならないということですね?
いえ,そういうわけではない……です. マニュアルの 6.2 節に書きましたが,今の仕様では
としています.なので,このコードは \inhibitglue 実行時の状況で結果が変わります.
……書いていて自分でも思ったのですが,混乱を招きそうなので「段落境界は一切またがない」と統一したほうが自然ですね.これに従って
\protected\def\inhibitglue{\relax% \ifhmode\ltj@@ihb\fi}のように書き換えたら,2つ上の書き込みで問題にしている
一行余計な空白ができる
という症状もなくなりました.
解決されているので,完了とします.
次のソースを処理させると,platex と LuaTeX-ja で結果が異なります:
LuaTeX-ja の実行結果で最初の 「 が全角下がりになるのは,メトリックに(\parindent 付き)段落の始めや,hbox境界には空白が入らないように指定しているからで,「仕様通り」です. しかし安直に全ての場合で空白挿入を抑止したため,3 行目の中黒の位置が 1/4 全角だけズレてしまっています.メトリックを直す必要がありそうです.
一方,\item 後の 「 は,platex だと全角下がりですが,LuaTeX-ja では全角二分下がりになっています.これは \item で始まる段落が先頭にラベル用の \hbox がおかれてしまうため,上に書いた指定が正しく働かないことによるものです.
ここから解決策の提案
もちろん jsclasses にあった \@@inhibitglue を復活させれば解決しますが,jsclasses の \@@inhibitglue:
ではいちいち if 文で判定しており,4 種類の場合しか対応できていません.代わりに,「実際の段落始め」を意味する whatsit を作成するという方法はどうでしょうか?