LaTeX 中有许多长度。例如,\enskip
、\enspace
、\quad
、\parskip
、\smallskip
……其中一些主要用于垂直间距,另一些主要用于水平间距,也许其中一些用于两种情况。我想知道是否有一个列表可以指示 LaTeX 中每种长度的含义和预期用途。我所说的“预期用途”不仅指长度是垂直还是水平,还指在什么情况下使用该特定长度是一种好的做法。
答案1
首先要知道的是间距参数和间距命令;\parskip
并且\parindent
属于前者,\enskip
,\quad
并且\smallskip
属于后者。
间距参数的完整列表会很长,因此让我们集中讨论间距命令。
垂直间距命令
\smallskip
并\medskip
留下\bigskip
由该类预先定义的一定量的垂直空间;它们是特殊情况\vspace{<skip>}
;如果在段落中间给出,它们会在它们恰好被设置的行和下一行之间产生垂直空间,因此最好使用它们之间段落。\smallbreak
,\medbreak
并且\bigbreak
做几乎相同的事情,但是如果前一个垂直空格小于它们要插入的空格,它们会删除它;它们还会终止一个段落并告诉 TeX 它们标记了一个可能发生分页符的好点。\addvspace{<skip>}
尝试与可能的其他同类间距合并,以便以两者的最大量进行间距(在某些情况下这可能不会发生,问题非常微妙)。\vfill
相当于\vspace{\fill}
告诉 TeX 用空白填充。该变体
\vspace*{<skip>}
告诉 TeX 如果垂直间距恰好出现在分页符之后,也不要忽略它;事实上,所有先前的垂直间距都会在分页符处消失。
水平间距命令
\enskip
、\quad
、\qquad
分别留出半个 em、一个 em 和两个 em 的水平空间。“em”是字体相关的长度,通常与当前字体中的大写字母 M 一样宽。\hspace{<skip>}
是一个通用的水平间距命令,它告诉 TeX 留出相应数量的水平空间。\hspace*{<skip>}
类似,但不会在换行符处消失。\hfill
相当于\hspace{\fill}
。\,
和\!
分别留下一个细空格和它的负数;\,
可用于修复由于视觉上不兼容的字符对(例如,大写字母紧跟在小写字母之后)或在诸如此类的情况下D.\,E.~Knuth
(有人更喜欢D.~E.~Knuth
;请注意,这D.E.~Knuth
是错误的)造成的一些不良间距。
使用什么水平命令?一般来说,最好依靠\quad
来自数百年印刷术的朋友。当特定应用程序需要不同的方法时,该\hspace
命令可以满足目的。
我不记得有任何可以用于垂直和水平间距的间距命令。
您提到\enspace
的是,如果我没记错的话,没有在 LaTeX 手册中列出(因为没有\smallbreak
,\medbreak
和\bigbreak
);它是从 Plain TeX 继承而来的,并且几乎与相同\enskip
,但从技术上讲它是一个 kern,而不是跳过。
命令\,
和\!
有一个“长版本”,只能在文本模式下使用(因此不能在公式中使用):\thinspace
和\negthinspace
。它们像一样\enspace
插入与跳过不同的字距,因为它们通常不定义换行点(实际规则相当复杂,请参阅 TeXbook);特别是 TeX 不会在 中的“D.”和“E.”之间换行D.\,E.~Knuth
。此外,字距只有其自然宽度(有关跳过,请参阅下文)。
什么是<skip>
?
A<skip>
是三叉长度规格:
<natural width> plus <stretching> minus <shrinking>
例如,\smallskip
相当于\vspace{3pt plus 1pt minus 1pt}
(在标准类中)告诉 TeX 保留 3pt 的垂直空间,但可收缩至 2pt 或可拉伸(最佳)至 4pt。但是,当存在拉伸组件时,TeX 还可以在紧急情况下将该空间拉伸到规定的范围之外;\pagebreak
当 TeX 没有足够的材料来正确填充当前页面时,通常会发现命令。
长度可以用任何合法的 TeX 测量单位来指定,但拉伸和收缩分量也可以用以下形式表示:无限单位 fil
和fill
(filll
谨慎使用)。例如,如果 TeX 在页面中找到\vfill
,它与 相同\vspace{0pt plus 1fill}
,则页面中找到的所有\smallskip
s 都将为 3pt 宽,因为 的无限分量\vfill
胜利。
该命令\stretch
可以在以下上下文中使用:\stretch{<decimal number>}
相当于跳过规范0pt plus <decimal number>fill
,因此\vspace{\stretch{2}}
相当于说\vfill\vfill
。TeX 将按比例用空白填充fill
组件。所以
\clearpage
\thispagestyle{empty}
\vspace*{\stretch{1}} % the same as `\vspace*{\fill}`
\begin{flushright}
\itshape
To my dog\\
and my cat
\end{flushright}
\vspace{\stretch{2}}
\clearpage
可用于在页面中放置题词,下方的空白空间是上方的两倍。请注意,必须使用上方的空白空间,\vspace*
以避免分页符处的空白空间消失。
警告
最近的一个问题提出了一个有趣的问题:定理标签生成的空间(XeTeX)
事实证明,这是一个未记录的功能(又称“无法修复的错误”):命令\,
\!
\thinspace
\negthinspace
\enspace
定义为
\kern<dimen>
因此如果它们以垂直模式发布(当 TeX 尚未开始一个段落时),它们会产生一个垂直的空间,而不是水平空间。
确保在段落开始时发出它们;例如,请注意\item
没有开始一个段落,也不\begin{<theorem>}
(其中<theorem>
代表用 定义的任何环境\newtheorem
)。
相反,如果 TeX 发现\quad
、\qquad
和时处于垂直模式,则它们会开始一个段落\enskip
。\hspace
答案2
查看以下链接:
当我们在数学模式下查看空格时,所有空格都会被忽略。因此,$x y$
与 是相同的$xy$
。这在排版数学公式等时非常重要。您可以添加空格的方式包括:
\,
用作$x\, y$
thinspace
\;
用作$x\; y$
thickspace
\(space)
用作$x\ y$
charspace
\quad
用作$x\quad y$
quadspace
\qquad
用作$x\qquad y$
产生double quadspace
和\!
用作 ,$x\! y$
产生negative thinspace
。
请注意,在上述所有空格中,字符空格都是必需的,以避免 LateX 将您的空格命令读取为由于\newcommand
。\
例如:$x\, y$
是好的,$x\,y$
是坏的。
然而,在数学模式下,可以使用文本空格在数学输入之间生成自定义空格,但必须小心输入此类文本的方式。建议使用amsmath
命令。也可以使用。数学模式下空格的其他可能实现可能包括或命令。\text{ }
\mbox{}
\hspace{ }
\hphantom{ }
请注意,TeXbyTopic 文档有点技术性,可能不像第一个链接那么简单。我今天晚些时候会提供一个示例。