\smash 仍然会插入不需要的垂直空格

\smash 仍然会插入不需要的垂直空格

考虑一下这个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}

相关内容