考虑示例1:
\setbox1=\vbox{
\moveleft 1pt \vbox{\hrule width 4pt height 10pt depth 0pt}
\hrule width 4pt height 10pt depth 0pt
}
\showbox1
输出:
\vbox(20.0+0.0)x4.0
.\vbox(10.0+0.0)x4.0, shifted -1.0
..\rule(10.0+0.0)x4.0
.\rule(10.0+0.0)x4.0
考虑示例2:
\setbox2=\vbox{
\moveright 1pt \vbox{\hrule width 4pt height 10pt depth 0pt}
\hrule width 4pt height 10pt depth 0pt
}
\showbox2
输出:
\vbox(20.0+0.0)x5.0
.\vbox(10.0+0.0)x4.0, shifted 1.0
..\rule(10.0+0.0)x4.0
.\rule(10.0+0.0)x4.0
示例 1 和示例 2 的输出与生成的 vbox 的宽度不同。相对于\moveleft
它不变,而\moveright
对其宽度有贡献。这是什么原因造成的,在哪里提到过电子书?
编辑:
这在电子书,第81页,第三段:
计算的宽度
\vbox
是封闭框延伸到参考点右侧的最大距离,考虑到可能的偏移。此宽度始终为非负值。
现在的问题是:如何在示例 2 中实现相同的行为,即,生成的文档相同,但宽度为 4pt,而不是 5pt?
答案1
区别实际上不是\moveleft
v 的作用就像\moveright
和包括外框宽度的作用就像。\moveright -1pt
\moveleft 1pt
\moveleft -1pt
\moveright 1pt
正如更新的问题中所述,TeXBook 将此记录为
计算的宽度
\vbox
是封闭框延伸到参考点右侧的最大距离,考虑到可能的偏移。此宽度始终为非负值。
可能最简单的方法是添加一个框,确保它不会影响外部框的宽度,即使向左或向右移动是\rlap
为了隐藏框的宽度,所以 \rlap{\vbox{\moveright ...
或者只是使用 kern 而不是移位框,所以 \rlap{\kern-1pt\vbox{...