是否可以改变第一页的 vsize?
我尝试过这个:
\vsize=20cm
\def\pagebody{%
\ifnum\pageno=1%
\advance\vsize by -8cm%
\vskip13cm\vbox to \vsize{\boxmaxdepth=\maxdepth \pagecontents}%
\else
\vskip5cm\vbox to \vsize{\boxmaxdepth=\maxdepth \pagecontents}%
\fi}%
但它似乎不起作用。
答案1
TeXbook 第 114 页内容如下:
由于
\vsize
、\maxdepth
和\topskip
是参数,因此您可以随时更改它们;如果您这样做会发生什么?好吧,TeX在打印“行”时(即,当当前页面上出现第一个框或插入时)会将\vsize
和的值盐化;对这两个参数的后续更改直到下一个当前页面开始之前都不会产生任何效果。\maxdepth
%%
因此,如果您希望\vsize
更改影响当前页面,则必须在添加第一个框或插入之前进行更改。 在您的例子中,您试图在例程中更改它\output
(因为这是\pagebody
使用 的地方),这太晚了:调用例程时页面主体已经完全装箱\output
- 它位于 中\box255
,因此希望更改它的 显然为时已晚\vsize
。
您可以做的是在文档的开头初始化\vsize
(12cm
在添加第一个框或插入之前)并更改其值对于后续页面在例程内。由于例程是在组内执行的,\output
因此必须使用。\global
\output
\vsize=12cm
\def\pagebody{%
\ifnum\pageno=1
\vskip 13cm\vbox to \vsize{\boxmaxdepth=\maxdepth \pagecontents}%
\global\advance\vsize by 8cm
\else
\vskip 5cm\vbox to \vsize{\boxmaxdepth=\maxdepth \pagecontents}%
\fi}%
\newcount\mycount
\def\repeattext#1#2{%
\mycount=#1
\loop
\ifnum \mycount >0
\advance\mycount by -1
#2%
\repeat
}
Foo bar \repeattext{2200}{foo bar }
\bye