关于 TeXbook 练习 23.3 的问题

关于 TeXbook 练习 23.3 的问题

这是练习 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会处理它(并且它不会产生新的工作要做)。但是如果你编写自己的输出例程,你就必须考虑这一点 — 如果您想使用插入。

相关内容