下面的示例使用了\signed
TeXbook 第 106 页的宏:
\tracingonline=1
\tracingparagraphs=1
\def\signed #1 (#2){{\unskip\nobreak\hfil\penalty50
\hskip2em\hbox{}\nobreak\hfil\sl#1\/ \rm(#2)
\parfillskip=0pt \finalhyphendemerits=0 \par}}
\hsize 3.0in \noindent
But sometimes an extra line must be added. \signed N. Bourbaki (Paris)
\bye
追踪显示:
@firstpass
\tenrm But sometimes an extra line must be added.
@\penalty via @@0 b=0 p=50 d=2600
@@1: line 1.2 t=2600 -> @@0
[] \tensl N.
@ via @@0 b=96 p=0 d=11236
@ via @@1 b=0 p=0 d=100
@@2: line 2.2 t=2700 -> @@1
@@3: line 1.3 t=11236 -> @@0
Bourbaki
@\kern via @@1 b=0 p=0 d=100
@@4: line 2.2 t=2700 -> @@1
\tenrm (Paris)
@\par via @@1 b=0 p=-10000 d=100
@@5: line 2.2- t=2700 -> @@1
当空的水平盒子被移除时,跟踪显示
@firstpass
\tenrm But sometimes an extra line must be added.
@\penalty via @@0 b=0 p=50 d=2600
@@1: line 1.2 t=2600 -> @@0
\tensl N.
@ via @@0 b=96 p=0 d=11236
@@2: line 1.3 t=11236 -> @@0
然后第一次传递失败。为什么?
答案1
胶水和罚球都是可以丢弃的,所以没有盒子,整个
\nobreak\hfil\penalty50\hskip2em\nobreak\hfil
序列可丢弃
如果断行发生在 p50 处,那么就会出现N Bourbarki (Paris)
在第二行,因此拉伸两个单词空格来填充该行会产生不良影响”
但实际上它在 N 之后休息,因为那是惩罚 0,在这种情况下足以补偿Bourbarki (Paris)
只有一个单词空间可以延伸,因此由此产生的更多糟糕但在休息时没有惩罚。
相反,\hbox{}
是不可丢弃的,因此如果在惩罚 50 处中断,则 2em 粘连将被丢弃,并且 最终\hbox{}
出现在下一行的开头,粘连会扩展以将文本向右对齐。(这基本上是latex 中\hspace
和之间的区别)\hspace*