在
\nonstopmode
\tenrm
\vsize=2cm
\output={\shipout\vbox{
\showlists
\unvbox255
}}
\hbox{blah}
\hbox{blah}
\hbox{blah}
\hbox{blah}
\hbox{blah}
\hbox{blah}
\hbox{blah}
\hbox{blah}
\hbox{blah}
\bye
我的输出例程\showlists
在除最后一次迭代之外的每次迭代中都给出了结果:
### recent contributions:
\glue(\baselineskip) 5.05556
\hbox(6.94444+0.0)x18.88895
.\tenrm b
.\tenrm l
.\tenrm a
.\tenrm h
\glue(\baselineskip) 5.05556
\hbox(6.94444+0.0)x18.88895
.\tenrm b
.\tenrm l
.\tenrm a
.\tenrm h
prevdepth 0.0
为什么有两个 -es hbox
,而不是三个或一个(我最期望的)?
答案1
<box>
当 TeX 发现垂直模式 (第 282 页)时,它也会调用页面构建器 (TeXbook,第 281 页) 。
当页面生成器运行时,最近贡献列表中的一些内容会被带到主垂直列表中,以便查看是否必须弹出页面。在您的例子中,\tracingpages=1
给出
%% goal height=56.9055, max depth=4.0
% t=10.0 g=56.9055 b=10000 p=0 c=100000#
% t=22.0 g=56.9055 b=10000 p=0 c=100000#
% t=34.0 g=56.9055 b=10000 p=0 c=100000#
% t=46.0 g=56.9055 b=10000 p=0 c=100000#
% t=58.0 g=56.9055 b=* p=0 c=*
分页符计算表明,在框 4 和框 5 之间有一个分页符,因此框 5 被放回到最近贡献的列表中,而框 6 已经在那里了,因为否则 TeX 就不会知道可能存在合法的断点。
如果blah
我们在框中输入的是 等,最近的贡献列表确实会blah1
显示blah2
### recent contributions:
\glue(\baselineskip) 5.05556
\hbox(6.94444+0.0)x23.88896
.\tenrm b
.\tenrm l
.\tenrm a
.\tenrm h
.\tenrm 5
\glue(\baselineskip) 5.05556
\hbox(6.94444+0.0)x23.88896
.\tenrm b
.\tenrm l
.\tenrm a
.\tenrm h
.\tenrm 6
prevdepth 0.0