考虑一下这个MWE:
\documentclass{scrartcl}
\begin{document}
\hrule
Paragraph
\vspace*{1cm}
\hrule
\smash{~~~~~~~~~~~~~~~~Overlap}
Paragraph
\end{document}
(查看输出latexfiddle.com)
第一位,\hrule
接触Paragraph
,这是理所当然的。
现在我插入了一些介于两者\smash
之间的内容,希望它不会影响垂直放置,但事实确实如此:规则和文本之间出现了一个小空间。
为什么?我该如何避免?
答案1
如果你说
\hbox{x}
\hbox{y}
在垂直模式下,TeX 会在框之间添加行间粘连。如果你这样写,效果也是一样
\setbox0=\hbox{x}\box0
Paragraph
因为最后两件事是一样的。\smash
本质上,所做的就是设置\hbox
并清除其高度和深度,然后执行\box0
。因此,您在规则和“段落”之间看到的实际上是被破坏的文本和“段落”之间的行间粘合。
解决方案:添加\nointerlineskip
:
\documentclass{scrartcl}
\begin{document}
\hrule
Paragraph
\vspace*{1cm}
\hrule
\smash{~~~~~~~~~~~~~~~~Overlap}\nointerlineskip
Paragraph
\end{document}
更新
由于 LaTeX 内核的变化,\smash
现在“离开垂直模式”。因此,为了避免段落由此开始,必须将其括在\hbox
:
\documentclass{scrartcl}
\begin{document}
\hrule
Paragraph
\vspace*{1cm}
\hrule
\hbox{\smash{~~~~~~~~~~~~~~~~Overlap}}\nointerlineskip
Paragraph
\end{document}