![为什么 \shipout 会开始一个新页面?](https://linux22.com/image/359761/%E4%B8%BA%E4%BB%80%E4%B9%88%20%5Cshipout%20%E4%BC%9A%E5%BC%80%E5%A7%8B%E4%B8%80%E4%B8%AA%E6%96%B0%E9%A1%B5%E9%9D%A2%EF%BC%9F.png)
Tex Book(第 20 次印刷,1991 年)对该\shipout<box>
原始内容进行了如下描述(第 279 页)。
在
<box>
形成之后(可能通过显式构造并在构造过程中更改模式,如前所述)\hbox
,其内容被发送到 dvi 文件
根据这个描述,我期望以下纯 TeX 手稿的 pdf
\shipout\hbox{Hello, }%
\shipout\hbox{world!}%
\bye
用一行代码组成一个页面:
你好世界!
相反,它包含两页:
你好,
世界!
为什么?
答案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”。