为什么 \shipout 会开始一个新页面?

为什么 \shipout 会开始一个新页面?

Tex Book(第 20 次印刷,1991 年)对该\shipout<box>原始内容进行了如下描述(第 279 页)。

<box>形成之后(可能通过显式构造并在构造过程中更改模式,如前所述)\hbox,其内容被发送到 dvi 文件

根据这个描述,我期望以下纯 TeX 手稿的 pdf

\shipout\hbox{Hello, }%
\shipout\hbox{world!}%
\bye

用一行代码组成一个页面:

你好世界!

相反,它包含两页:

  1. 你好,

  2. 世界!

为什么?

答案1

恐怕你的期望与 TeX 的期望不一致。如果你看看第 227 页,最后一段双重危险的段落,你可以读到

有时你不希望 TeX 推迟\write\openout\closeout。你可以说,例如,' \shipout\hbox{\write...}',但这会在文件中放入一个不需要的空白页dvi

每一个 \shipout操作以 DVI 文件(或 PDF,如果有pdftex)的形式发送出一页\pdfoutput=1

使用\shipout<box>,构建盒子,然后以适当的格式传送到 DVI(或 PDF)文件,最后从内存中删除。

请注意\shipout, 本身对主垂直列表没有影响:它通常是输出例程管理的,并且通常会\shipout\box255在适当的时间调用,从而输出一个新页面。所以如果你这样做

ABC

\shipout\hbox{DEF}

GHI

\bye

你会得到页:一页写着“DEF”,另一页写着两行“ABC”和“GHI”。

相关内容