为什么最近贡献的列表恰好包含两个框?

为什么最近贡献的列表恰好包含两个框?

\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

相关内容