Open aminophen opened 7 years ago
すっかり忘れていました,ありがとうございます.
07e48d0d2c60f69b954f7c78dd73a8b507917b9f で
\penalty0
は挿入しない)
を実装しました.なお,リストの先頭が JFM カーン(または禁則用ペナルティ→ JFM カーン)であったときにはまだ特に何もしていません.
同様に,ボックスの末尾が JFM グルーであった場合も削除されます.そのため,\hbox{(} の幅は 0.5 zw となります.
ですが,単純に削除されるのではなく,グルーが \hskip0pt
になっていますね.削除されないのは何が理由があるのでしょうか?
07e48d0
よさそうですね。ありがとうございます。 → r45329 でコミット。
ボックスの末尾が JFM グルーであった場合も削除されます.
ですが,単純に削除されるのではなく,グルーが \hskip0pt になっていますね.
ほんとだ,なんでだろう? 要らないノードは作らない方が良いと思うのですが…
\tracingonline1 \showboxdepth10000 \showboxbreadth10000
\kanjiskip10pt
\setbox0=\hbox{・あ・}\showbox0
漢\box0漢
\bye
ボックスの末尾が JFM グルーであった場合,グルーが \hskip0pt となる
\hbox{)}あ
と \hbox{)\inhibitglue}あ
を比較すると,前者だとグルーのおかげで「)」「あ」の間に \kanjiskip が挿入されないという違いがありますね.どうしてこういう挙動になっているのだろう…….
14 に「\hbox{・} の処理」という言及があったのですが,数ヶ月経って何だったっけ…?となってしまったので,非公開の場所ではない発言なので北川さんのを転載しておこうと思います。
pTeX で
\hbox{・}
で前の方に空白が入る問題ですが,どうやらadjust_hlist
関数のバグのようです.例えば\hbox{(}
と入力したとき,adjust_hlist
関数に渡されるときにはと,先頭に JFM グルーが挿入されています. しかし
adjust_hlist
関数にあるというコードによって「ボックスの先頭が JFM グルーだった場合にはそのグルーを削除する」処理が行われます.同様に,ボックスの末尾が JFM グルーであった場合も削除されます.そのため,
\hbox{(}
の幅は 0.5 zw となります. 一方,\hbox{・}
では,adjust_hlist
関数に渡される時点でと先頭がグルーではありません.そのため,この場合は頭から二番目のグルーは残り,一方で最後のグルーは消えるので「前のみグルーが入る」という歪な結果になります. ペナルティは
\unhbox
の時を考えると消す必要はないと思いますが,「先頭が禁則用ペナルティかつその後が JFM グルー(JFM カーンも含む)であった場合でも,その JFM グルーを消す」とするのはどうでしょう? あと,\prebreakpenalty
に 0 を設定すると,\penalty0
が入るんですね.せっかくなのでここも何とかしたいですね.