练习的答案是:
\def\sqr#1#2{{\vcenter{\vbox{
\hrule height.#2pt
\hbox{\vrule width.#2pt height#1pt \kern#1pt \vrule width.#2pt}
\hrule height.#2pt}}}}
\def\square{\mathchoice\sqr34\sqr34\sqr{2.1}3\sqr{1.5}3}
我想知道为什么\vbox
要使用 extra。它的缺失会以某种方式影响结果吗?
答案1
A 的\vcenter
处理方式与 不同\vbox
,只不过vcent
原子被包裹在构造周围,这最终意味着最终的盒子被调整,因此其高度+深度以数学轴为中心。然而,正如 Udo 在评论中指出的那样,TeXBook 附录 G 的细节确实意味着\scriptspace
处理方式存在一些差异。
\scriptspace=5pt % excessive ammount to make things clearer
\def\sqr#1#2{{\vcenter{\vbox{
\hrule height.#2pt
\hbox{\vrule width.#2pt height#1pt \kern#1pt \vrule width.#2pt}
\hrule height.#2pt}}}}
\def\square{\mathchoice\sqr34\sqr34\sqr{2.1}3\sqr{1.5}3}
\def\sqrb#1#2{{\vcenter{
\hrule height.#2pt
\hbox{\vrule width.#2pt height#1pt \kern#1pt \vrule width.#2pt}
\hrule height.#2pt}}}
\def\squareb{\mathchoice\sqrb34\sqrb34\sqrb{2.1}3\sqrb{1.5}3}
$|A_{ \square}|\, |A_{\squareb }|$
\bye
Udo 在附录 G 中重点介绍了相关规则如下:
它的性质
\hrule
延伸至封闭框的宽度。这里是 hbox 的宽度加上
\scriptspace
。\vbox
的宽度\hrule
正好是 的宽度\hbox
;\scriptspace
稍后应用。(附录 G:规则 1 跳过了 hrule,规则 18 中的后处理将其应用于
\scriptspace
hbox 或 vbox。)
具体来说是 18b,引用自 TeXBook:
18b. 如果上标字段为空(因此只有下标),则设置框X到样式 C↓ 的下标,并添加
\scriptspace
到瓦特(x)
这意味着只有一个框时,水平规则会延伸,但对于嵌套框(任何类型),内部列表的宽度保持不变。