在水平盒子之间添加一个水平规则会减少它们的垂直距离

在水平盒子之间添加一个水平规则会减少它们的垂直距离

使用 pdftex。

给出两个示例程序

测试0.tex

\vbox{
\hbox{X}
\hbox{Y}
}

\bye

测试1.tex

\vbox{
\hbox{X}
\hrule
\hbox{Y}
}

\bye

给出以下输出。

测试0.png

测试0.png

测试1.png

测试1.png

因此,\hrule在两个\hboxes 之间添加 a 实际上会减少它们的垂直距离。

为什么会这样,哪些参数会影响两个同级水平盒子之间的垂直距离?

答案1

引用自 TeXbook,第 79 页(最后一个危险弯道)

例外:规则框前后不插入行间粘连。您也可以通过设置\nointerlineskip between boxes 来禁止行间粘连。

在没有规则的情况下,行间粘连照常添加:计算总和s上线深度与下线高度之差;如果bs(在哪里b是自然长度\baselineskip)大于\lineskiplimit,插入长度的胶水bs(使用plusminus的组件\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

相关内容