マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

pTeX の後禁則ペナルティがサッパリわからない話

〈ア〉に後禁則ペナルティを設定すると……

% plain pTeX文書
\showboxdepth=100 \showboxbreadth=100 \tracingonline=1
\postbreakpenalty`ア=1234
\setbox0\hbox{アレ}\showbox0
\bye
> \box0=
\hbox(7.77588+1.38855)x19.24432, yoko direction
.\tenmin ア
.\penalty 1234(for kinsoku)
.\glue(\kanjiskip) 0.0 plus 0.4 minus 0.4
.\tenmin レ

フツー。

〈ア〉の直後にグルーを入れると……。

% 4行目を変える
\setbox0\hbox{\hskip42ptレ}\showbox0
> \box0=
\hbox(7.77588+1.38855)x61.24432, yoko direction
.\tenmin ア
.\penalty 1234(for kinsoku)
.\glue 42.0
.\tenmin レ

…これもフツー。*1

後禁則ペナルティは \lastpenalty で取得できるか?
\setbox0\hbox{\xdef\pa{\the\lastpenalty}}\message{\pa}\showbox0
1234
> \box0=
\hbox(7.77588+1.38855)x19.24432, yoko direction
.\tenmin ア
.\penalty 1234(for kinsoku)
.\glue(\kanjiskip) 0.0 plus 0.4 minus 0.4
.\tenmin レ

取得できた。

後禁則ペナルティは \unpenalty で削除できるか?
\setbox0\hbox{\unpenalty}\showbox0
> \box0=
\hbox(7.77588+1.38855)x19.24432, yoko direction
.\tenmin ア
.\penalty 1234(for kinsoku)
.\glue(\kanjiskip) 0.0 plus 0.4 minus 0.4
.\tenmin レ

削除できない……みたい。

念のため、\lastpenalty を調べてみる。

\setbox0\hbox{\xdef\pa{\the\lastpenalty}%
\unpenalty\xdef\pb{\the\lastpenalty}}%
\message{\pa/\pb}\showbox0
1234/0
> \box0=
\hbox(7.77588+1.38855)x19.24432, yoko direction
.\tenmin ア
.\penalty 1234(for kinsoku)
.\glue(\kanjiskip) 0.0 plus 0.4 minus 0.4
.\tenmin レ

アレレ……実際には消えていないのに、2 回目の \lastpenalty はゼロに変わってる……。

またグルーを入れてみよう。

\setbox0\hbox{\unpenalty\hskip42pt レ}\showbox0
> \box0=
\hbox(7.77588+1.38855)x61.24432, yoko direction
.\tenmin ア
.\glue 42.0
.\tenmin レ

アレレレレ、今度は禁則ペナルティが消えた……!

まとめ

わけがわからないよ……。

*1:明示グルーを入れたため和欧文間空白(xkanjiskip)が抑止された。