\box255 是什么?

\box255 是什么?

我正在读一切手册上说:

此包提供了钩子\EveryShipout和,\AtNextShipout 其参数在输出例程构造之后 \box255、被\shipout调用之前执行。

这似乎暗示着它\box255在某种程度上是特殊的;但我尝试在网上查找它,却发现了很多关于它的信息。

那么,有人可以解释为什么会\box255如此特殊,并可能指出涉及它的快速阅读或教程吗?

答案1

当 TeX 决定是时候弹出一个页面(因为一个页面已被填满或用户发出了相同效果的命令)时,它会进行一些维护工作,然后将页面的内容打包到盒子寄存器 255 中。

接下来它调用输出例程,它可以做几件事:添加页眉和页脚、增加页码等等。

最简单的输出程序是

\output{\shipout\box255}

除了将页面输出之外,它不会对页面做任何处理。Plain TeX 中的标准输出例程是(简化形式)

\output={\plainoutput}
\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%
  \advancepageno
  \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
\def\pagebody{\vbox to\vsize{\boxmaxdepth=\maxdepth \pagecontents}}
\def\makeheadline{\vbox to 0pt{\vskip-22.5pt
    \line{\vbox to8.5pt{}\the\headline}\vss}\nointerlineskip}
\def\makefootline{\baselineskip=24pt \lineskiplimit=0pt
    \line{\the\footline}}
\def\dosupereject{\ifnum\insertpenalties>0 % something is being held over
  \line{}\kern-\topskip\nobreak\vfill\supereject\fi}
\def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi
  \dimen@=\dp255 \unvbox255
  \ifvoid\footins\else % footnote info is present
    \vskip\skip\footins \footnoterule \unvbox\footins\fi
  \ifr@ggedbottom \kern-\dimen@ \vfil \fi}
\def\footnoterule{\kern-3pt
  \hrule width 2truein \kern 2.6pt} % the \hrule is .4pt high

其中 的使用\box255更为复杂,因为它会跟踪诸如浮动数字和脚注之类的插入内容;\shipout操作是在另一个框中执行的,而该框又是使用 的内容构建的\box255。(我甚至没有尝试面对 LaTeX 输出例程,它比这个复杂得多,但事情的意义是一样的。)

这个盒子寄存器由 TeX 自动管理,使用它是相当危险的(如果你的名字不是 Heiko Oberdiek)。

该软件包atbegshi通过以下方式做了一些技巧重新定义 \shipout,在其中添加挂钩,以便可以以各种方式调整运出的箱子的内容。

第一组具有此类功能的宏可以在中找到quire.tex,这是一段非常棒的代码,我相信即使使用 LaTeX 仍然可用;但现在有更简单的方法来实现相同的效果。

% quire.tex: Macros for making booklets, printing double pages, and
%            printing outlines and crop marks.
% version: 1.0  release: 19 January 1991
%
% copyright (c) 1991 Marcel R. van der Goot

它使用类似的技巧来制作纸张,即将多组页面打印在同一张纸上,然后进行剪切和折叠。

答案2

相关内容