为什么 LaTeX 中 \hrulefill 的定义以 \kern\z@ 结尾?

为什么 LaTeX 中 \hrulefill 的定义以 \kern\z@ 结尾?

在 plainTeX 中,\hrulefill定义如下:

\def\hrulefill{\leaders\hrule\hfill}

另一方面,在 LaTeX 中它的定义如下:

\def\hrulefill{\leavevmode\leaders\hrule\hfill\kern\z@}

我知道\leavevmode需要 来抑制垂直模式下的错误。但是,我不明白为什么\kern\z@需要 来定义。

我已经验证没有输出任何内容 \def\hrulefill{\leavevmode\leaders\hrule\hfill},但我无法理解为什么会发生这样的事情。

根据source2e.pdf,只有\kern\z@使其在“表格”和“数组”环境中工作所需的描述,我还没有很好地理解它。

答案1

在乳胶tabular和类似的环境中,您可以使用

... &  foo & ...

或者

...&foo& ...

或者

....&
 foo &
....

并得到相同的结果。人们可能只是期望这种情况自然发生,但在底层对齐原语中,这些会因为相同的原因给出不同的输出,这\fbox{foo}\fbox{ foo }

为了使其工作,LaTeX\ignorespaces在单元格的开始和\unskip结束处使用,但也会像规则填充一样\unskip删除,除非领导者受到不会删除的东西的保护。\leaders\unskip

相关内容