`\hspace*` 是否等同于 `\strut\hspace`?

`\hspace*` 是否等同于 `\strut\hspace`?

使用\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

相关内容