我目前正在阅读 Knuth 的 TeXbook。作为教育参考,有没有办法显示我当前“所处”的所有框的层次结构列表(换句话说,我正在以交互方式键入文档,并且在某个时候,我希望看到 TeX 当前正在创建的框),并且理想情况下,还能够显示它们的内容?
Knuth 提到了原语\showbox
,但(对我而言)似乎它需要首先运行\setbox
,而且,它似乎没有告诉我到目前为止我输入的内容。
答案1
\tracingonline1
aa
\vbox{
bb \hbox{ccc \showlists
}}\bye
产生终端输出
This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2018) (preloaded format=pdftex)
restricted \write18 enabled.
entering extended mode
(./aa910.tex
### restricted horizontal mode entered at line 7
\tenrm c
\tenrm c
\tenrm c
\glue 3.33333 plus 1.66666 minus 1.11111
spacefactor 1000
### horizontal mode entered at line 7
\hbox(0.0+0.0)x20.0
\tenrm b
\tenrm b
\glue 3.33333 plus 1.66666 minus 1.11111
spacefactor 1000
### internal vertical mode entered at line 5
prevdepth ignored
### vertical mode entered at line 0
### current page:
\glue(\topskip) 5.69446
\hbox(4.30554+0.0)x469.75499, glue set 439.75496fil
.\hbox(0.0+0.0)x20.0
.\tenrm a
.\tenrm a
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.etc.
total height 10.0
goal height 643.20255
prevdepth 0.0, prevgraf 1 line
! OK.
l.7 bb \hbox{ccc \showlists
?
所以当它停止的时候
你会看到你处于受限的 hlist (=hbox) 中
### restricted horizontal mode entered at line 7
\tenrm c
\tenrm c
\tenrm c
\glue 3.33333 plus 1.66666 minus 1.11111
spacefactor 1000
那是在一个不受限制的 hlist (=段落前它被分成几行
### horizontal mode entered at line 7
\hbox(0.0+0.0)x20.0
\tenrm b
\tenrm b
\glue 3.33333 plus 1.66666 minus 1.11111
spacefactor 1000
并且该段落位于页面顶部的垂直列表中,并且该行已经有了水平盒子aa
### vertical mode entered at line 0
### current page:
\glue(\topskip) 5.69446
\hbox(4.30554+0.0)x469.75499, glue set 439.75496fil
.\hbox(0.0+0.0)x20.0
.\tenrm a
.\tenrm a
.\penalty 10000
.\glue(\parfillskip) 0.0 plus 1.0fil
.etc.
如果你想要看到更长的列表而不被截断,请etc.
添加
\showboxbreadth=1000
在顶部
还
\showboxdepth=1000
但在这种情况下没有什么区别,因为这个例子没有深层嵌套。