使用\hspace*
本质上是否相同\strut\hspace
?
描述\hspace 与 \hspace*似乎表明情况可能如此,但我想知道它们可能有所不同的情况。
答案1
\hspace*
在行首也有效:
\documentclass{article}
\usepackage[a6paper]{geometry}
\parindent=0pt
\begin{document}
\hrulefill\sloppy
This is a sentence which makes no sense.
\hspace{3cm} And so on \ldots
This is a sentence which makes no sense.
\hspace*{3cm} And so on \ldots
This is a sentence which makes no sense.
\strut\hspace{3cm} And so on \ldots
\end{document}
\strut
只是一个具有高度和深度(
但没有宽度的盒子!的行为\hspace*
类似于\vspace*
垂直移位。
答案2
不,它们不一样。当您使用\hspace*{1cm}
(或任何长度)时,LaTeX 会将其转换为
\@hspacer{1cm}
进而变成
\vrule \@width \z@ \nobreak \hskip #1\hskip \z@skip
正如我在回答您链接的问题时所述。规则的高度和深度与最终排版的水平框一样高和深。
相反,\strut
会\unhcopy\strutbox
传递一个框寄存器的内容,该框寄存器也包含一个零宽度规则,但高度和深度的总和等于当前基线跳跃的(自然大小)。每当处理字体大小更改命令(例如\normalsize
、\footnotesize
甚至)时,框寄存器的内容都会更新,因此 的高度和深度始终(几乎)反映当前基线跳跃。LaTeX 将数量分为 7 比 3,因此如果基线跳跃为 12pt,\large
则支柱的高度和深度分别为 8.4pt 和 3.6pt。请参阅\fontsize{...}{...}\selectfont
\strut
\strut 定义解释关于的微妙之处\strut
,但它仅与数学模式有关。
这就是区别:\hspace*
出现的行的高度和深度仅受其中的字母的影响,更准确地说,受其中的框的影响;\strut\hspace{1cm}
你得到的高度和深度的总和至少等于1\baselineskip
(如果列表中包含异常大的框,它可能会更大)。
此外,\strut\hspace{1cm}
在支柱和粘连之间有一个可行的断点,而\hspace*{1cm}
没有。另一个区别是,\strut\hspace{1cm}
将在段落末尾消失(不是支柱,而是粘连),因为 TeX\unskip
在那里消失;另一方面,即使应用\hspace*{1cm}
也不会消失,因为有尾部粘连,因此将取消这一点而不是主粘连。\unskip
\hskip\z@skip
\unskip