在 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