这是练习 23.3:
解释如何更改纯 TeX 的输出程序,以便它能够生成两倍多的页面。通常放在第 1、2、3 等页上的材料应该放在第 1、3、5 等页上;并且偶数页除了标题和页脚外应该完全空白。...
在 plain.tex 中 \output 为{\plainoutput}
,其中\plainoutput
:
\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%
\advancepageno
\ifnum\outputpenalty>-20000 \else\dosupereject\fi}
回答练习 23.3 的答案\output
是{\plainoutput\blankpageoutput}
,\blankpageoutput
即:
\def\blankpageoutput{\shipout\vbox{\makeheadline
\vbox to\vsize{}\makefootline}\advancepageno}
\output
与plain.tex相反,此输出例程不以 结尾\ifnum\outputpenalty>-20000 \else\dosupereject\fi
。
这最后的“如果”是为了什么而来的,也应该\blankpageoutput
有这个“如果”吗?
答案1
这是对该问题下方评论的综合回答:
最后\ifnum
检查当前页面上插入的惩罚是否大于 -20000,即,如果有太多插入被阻止,则执行超级弹出,即将所有插入放在后续页面上(如果是这种情况)。\blankpageoutput
无法产生任何插入(因为页面完全是空白的),因此不会造成惩罚。
换句话说,\blankpageoutput
不需要这个,\ifnum
因为\plainoutput
会处理它(并且它不会产生新的工作要做)。但是如果你编写自己的输出例程,你就必须考虑这一点 — 如果您想使用插入。