使用 pdftex。
给出两个示例程序
测试0.tex
\vbox{
\hbox{X}
\hbox{Y}
}
\bye
测试1.tex
\vbox{
\hbox{X}
\hrule
\hbox{Y}
}
\bye
给出以下输出。
测试0.png
测试1.png
因此,\hrule
在两个\hbox
es 之间添加 a 实际上会减少它们的垂直距离。
为什么会这样,哪些参数会影响两个同级水平盒子之间的垂直距离?
答案1
引用自 TeXbook,第 79 页(最后一个危险弯道)
例外:规则框前后不插入行间粘连。您也可以通过设置
\nointerlineskip
between boxes 来禁止行间粘连。
在没有规则的情况下,行间粘连照常添加:计算总和s上线深度与下线高度之差;如果b–s(在哪里b是自然长度\baselineskip
)大于\lineskiplimit
,插入长度的胶水b–s(使用plus
和minus
的组件\baselineskip
);否则,插入\lineskip
胶水。
答案2
实际上,这不是 \hbox 独有的属性。这是由于构造上方和下方定义的默认间距而发生的\hrule
。您可以使用命令手动更改间距\kern
。
\vbox{
\hbox{X}
\hrule
\kern2pt %change the pts according to your needs
\hbox{Y}
}
或者,您也可以为此定义一个宏。
答案3
也许你需要这个:
\newdimen\savedprevdepth
\vbox{
\hbox{X}
\savedprevdepth=\prevdepth \hrule \prevdepth=\savedprevdepth
\hbox{Y}
}
\bye
解释:\prevdepth
原始寄存器设置为垂直列表中最后一个框的深度。-1000pt
当垂直列表为空或\hrule
将插入到垂直列表时,它将设置为魔法值。//\baselineskip
仅当不等于时,下一个框的处理才处于活动\lineskiplimit
状态。\lineskip
\prevdepth
-1000pt