@egreg 给出了非常好且透彻的答案(La)TeX 中有哪些不同类型的框?。看来,如果能有一个同样彻底的答案来控制间距就好了。
我没想太多
\vspace
\hspace
\\[<dim>]
及其带星号的变体,因为在有哪些命令可以控制水平间距? 至少在水平间距方面。
我更多地考虑的是
\llap
\rlap
\clap
\smash
\mathllap
\mathrlap
\mathclap
还有幻影:
\phantom
\hphantom
\vphantom
我确信我还忘记了一些。
除此之外,最好不仅要对这些命令的用途和区别进行某种解释,还要指出人们可以在哪里找到这些命令的文档。例如,
我知道我可以做texdoc mathtools
并找到相关文档\mathllap
等。但我不知道在哪里可以找到相关文档\smash
和各种幻影。
编辑
有时我并不总是能得到我期望的结果
例如,\phantom
并不总是像我希望的那样,比如在这个例子中,
\documentclass{article}
\usepackage{amsmath,amssymb}
\pagestyle{empty}
\begin{document}
\begin{align*}
y &= x - z\raisebox{0ex}[0pt][0pt]{\rule[-4ex]{0.1pt}{4ex}} \\
&= x \mathop{\phantom{-}} z\raisebox{0ex}[0pt][0pt]{\rule{0.1pt}{4ex}} \\
&= x \phantom{ - } z \\
\end{align*}
\hspace*{\fill}Or even worse:\hspace*{\fill}
\begin{align*}
y &= x - z\raisebox{0ex}[0pt][0pt]{\rule[-4ex]{0.1pt}{4ex}} \\
&\phantom{= x -} z\raisebox{0ex}[0pt][0pt]{\rule{0.1pt}{4ex}} \\
\end{align*}
\end{document}
答案1
调用这些间距命令有点误导,它们都是设置指定尺寸的盒子的命令。
\rlap
,\llap
\clap
本质上是\makebox[0pt][r]
,\makebox[0pt][l]
除了\makebox[0pt][c]
它们可以避免寻找可选参数等的复杂性之外。它们与的不同之处在于,它们\hbox
遵循\mbox
纯 TeX 而不是 LaTeX 传统,它们\leavevmode
在定义的开头缺少一个,因此如果在垂直模式下使用,它们不会开始一个段落。
在文本模式下\smash
本质上也是同样的方法\raisebox{0pt}[0pt][0pt]
在文本模式下,幻像命令都相当于使用一个由另一个框给出尺寸的空框,因此\phantom
本质上
\def\Phantom#1{\savebox{0}{#1}\savebox{2}{}%
\ht2=\ht0 \dp2=\dp0 \wd2=\wd0
\usebox{2}}
\vphantom
除强制宽度0pt
而不是第一个框中文本的原始宽度外,其他均相同。
数学模式版本基本上都相同,除了两个复杂因素之外,数学模式必须在框内重新输入,并且\mathchoice
必须使用构造才能在显示和脚本大小下正常工作。 \phantom
并\smash
内置数学模式测试,然后自动在文本和数学定义之间切换。因为\rlap
(仅出于历史原因)它只是文本模式,所以对于数学模式,您需要明确地将 batc 切换到数学或\mathrlap
从合适的包中使用。
请注意,总是\mathmode
会产生一个mathord
没有特殊间距的原子。在问题的例子中,您将的间距-
与 mathord 间距和 mahtop 间距进行了比较,但是它-
是一个 mathbin 原子,因此您需要\mathbin{\phantom{-}}
\documentclass{article}
\usepackage{amsmath,amssymb}
\pagestyle{empty}
\begin{document}
\begin{align*}
y &= x - z\raisebox{0ex}[0pt][0pt]{\rule[-4ex]{0.1pt}{4ex}} \\
&= x \mathbin{\phantom{-}} z\raisebox{0ex}[0pt][0pt]{\rule{0.1pt}{4ex}} \\
&= x \mathbin{\phantom{ - }} z \\
\end{align*}
\hspace*{\fill}Or even worse:\hspace*{\fill}
\begin{align*}
y &= x - z\raisebox{0ex}[0pt][0pt]{\rule[-4ex]{0.1pt}{4ex}} \\
&\phantom{{}= x -{}} z\raisebox{0ex}[0pt][0pt]{\rule{0.1pt}{4ex}} \\
\end{align*}
\end{document}
即使如此,下标的间距也可能不同
\phantom{P}_x
就好像
{P{}}_x
其中下标与
P_x
这种情况很难避免,因为幻影暗示的装箱会掩盖字体指标中的字距调整信息,但幸运的是,很少需要在不可见的基础上使用可见的下标。