如何垂直填充页面?

如何垂直填充页面?

我尝试使用 UTF-8 输入打印标签。我读到,这需要xetex。所以我写了以下示例,1€在 102mm x 152mm 标签的四个角上书写:

\pdfpagewidth=102mm
\pdfpageheight=152mm

\hsize=\pdfpagewidth
\vsize=\pdfpageheight

\advance\hoffset by -1in
\advance\voffset by -1in

\parindent=0pt
\nopagenumbers

\font\cmuss="CMU Sans Serif" at 12pt
\cmuss

1€\hfill 1€
\vfill
1€\hfill 1€

\bye

但它\vfill不起作用。

在此处输入图片描述

第二行不在页面底部,而是在中间。

我做错什么了?

答案1

只需\eject在 之前插入\bye. :-)

对于您所看到的内容的解释很简单,\bye在纯 TeX (TeXbook p.357) 中是这样定义的:

\outer\def\bye{\par\vfill\supereject\end}

这就是不良现象的\vfill来源。

边注

TeX 遇到 时会使用一条特殊规则\end。我在这里给出它以供参考,因为这是我首先想到的,但它是这里不涉及(仅当\end遇到时才会触发,并且主垂直列表中的内容尚未被例程处理\output,或者调用次数少于例程\shipout的调用次数\output- 这里不是这种情况,因为纯 TeX 中的\bye默认\output例程做了正确的事情)。此规则在 TeXbook 第 264 页中给出:

当 TeX 看到\end命令时,只有当主垂直列表已完全输出并且 时,它才会终止作业\deadcycles=0。否则它会插入相当于

\line{} \vfill \penalty-’10000000000

进入主垂直列表,并准备\end再次读取令牌。这具有重复调用输出例程的效果,直到所有内容都已输出。特别是,双列格式的最后一列不会丢失。

答案2

援引“最高无限性”的危险filll(参见 TeXbook 第 72 页)

\pdfpagewidth=102mm
\pdfpageheight=152mm

\hsize=\pdfpagewidth
\vsize=\pdfpageheight

\advance\hoffset by -1in
\advance\voffset by -1in

\parindent=0pt
\nopagenumbers

%\font\cmuss="CMU Sans Serif" at 12pt
%\cmuss

1€\hfill 1€
\vskip 0pt plus 1filll

1€\hfill 1€

\bye

相关内容