输出程序插入惩罚

输出程序插入惩罚

我使用的是纯 TeX(实际上是纯 e-TeX),由较新版本的 MiKTeX(pdfTeX)处理。请考虑以下可以使用纯 TeX 处理的代码片段:

\noindent
A\par
\output={\unvbox255}
\break
\vskip 1pt
\noindent
B
\output={\showbox255 \plainoutput}
\end

据我所知,我原本以为,当\break出现时,输出例程会将的内容重新注入\box255主垂直列表中,\vskip 1pt清除并将\skip\topskip插入字母 B 之前。但事实并非如此:在出现 break 时首次调用输出例程后,将\penalty10000(莫名其妙地)插入主垂直列表中,并且未清除而是留在原处(这由上面第二个定义中\vskip 1pt的显示)。这是 TeX 的正常行为还是错误?\showbox\output

答案1

如果当前页面中没有方框,TeX 只会丢弃跳过的内容。10000 的惩罚是由于 TeXBook 中所述的以下情况而产生的:

当最终选定最佳分页符时,TeX 将从页面底部删除所选分页符之后的所有内容。 当前页面, 并将其全部放回到最近的贡献。所选断点本身被放置在最近贡献的最顶部。如果它是一个惩罚项,则记录惩罚的值,\outputpenalty并将贡献列表中的惩罚更改为 10000;否则\outputpenalty设置为 10000。

相关内容