尝试了这两个命令之后,我注意到与该命令\hspace*
相反的操作\hspace
将在行尾插入一个空格。
所以我想知道是否有人可以解释它是如何工作的以及何时使用任一命令。
答案1
根据规则,空格(粘连和字距)在换行后消失;根据同样的规则,换行只能发生在空格的“左边缘”。此外,如果说\hspace{1cm}\hspace{1cm}
,第一个\hspace
是可行的断点,但不是第二个。
这就是 TeX 如何使正常和右侧不规则段落的左边距对齐(左侧不规则段落使用不同的特性)。
更准确地说,一个粘连(\hspace
)只能被选为断点,前提是它前面有一个不可丢弃物品(最常见的是角色或规则)。可丢弃的物品包括处罚。
在某些情况下,人们希望空格不会在换行符处消失:例如,练习中需要手动填写的空白。因此 LaTeX 提供了变\hspace*
体。
当\hspace*{1cm}
调用时,LaTeX 使用内部\@hspacer
命令
\vrule width 0pt \nobreak \hskip 1cm \hskip 0pt plus 0pt minus 0pt
\vrule width 0pt
放置一个不占用空间的隐形物体;\nobreak
通过施加非常大的惩罚来设置一个无法突破的点;\hskip 1cm
不能用作断点,因为它前面有一个可丢弃的物品(惩罚);\hskip 0pt plus 0pt minus 0pt
插入是为了避免由于原语的特殊语法而可能出现的问题\hskip
;它不是一个可行的断点,因为它前面有一个可丢弃的项目;如果
\par
出现以下情况,那么最后一团胶水会被去除,但主要部分不会去除。
这样就\hspace*{1cm}
形成了一个不可分割的单元,它永远不会被视为断点,也不会在换行时消失。
该规则的结果是空间后 \hspace*{1cm}
不能用作断点。
假设我们要定义一个\blank
宏,用于留出空间以便稍后手动填充:
\documentclass{article}
\newcommand{\blank}[1]{\hspace*{#1}}
\begin{document}
\parbox{4cm}{
Some text to see what's going on: \blank{2cm} and \blank{3cm} with text after them
}
\end{document}
结果是
(其中规则代表\hspace*{...}
命令;它们不会被此命令打印出来,我使用它们只是为了显示效果)。您可以看到后面的空格\blank{...}
不用作断点。
有了不同的定义,空白能出现在行末:
\documentclass{article}
\newcommand{\blank}[1]{\hspace*{#1}\linebreak[0]}
\begin{document}
\parbox{4cm}{
Some text to see what's going on: \blank{2cm} and \blank{3cm} with text after them
}
\end{document}
将导致
当然,这里的排版不是最理想的,但重点是展示事物是如何运作的。
该\linebreak[0]
命令仅插入一个可行的断点,并未说明任何特殊的偏好。
对于感兴趣的读者,展示的“规则”效果\hspace*
是通过以下技巧获得的:
\let\TeXhskip\hskip
\def\hskip{\leaders\hrule\TeXhskip}