为什么 \moveleft 对宽度没有影响,但 \moveright 却有影响?

为什么 \moveleft 对宽度没有影响,但 \moveright 却有影响?

考虑示例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

区别实际上不是\moveleftv 的作用就像\moveright和包括外框宽度的作用就像。\moveright -1pt\moveleft 1pt\moveleft -1pt\moveright 1pt

正如更新的问题中所述,TeXBook 将此记录为

计算的宽度\vbox是封闭框延伸到参考点右侧的最大距离,考虑到可能的偏移。此宽度始终为非负值。

可能最简单的方法是添加一个框,确保它不会影响外部框的宽度,即使向左或向右移动是\rlap为了隐藏框的宽度,所以 \rlap{\vbox{\moveright ...或者只是使用 kern 而不是移位框,所以 \rlap{\kern-1pt\vbox{...

相关内容