我尝试使用 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