有时我并不总是能得到我期望的结果

有时我并不总是能得到我期望的结果

@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

这种情况很难避免,因为幻影暗示的装箱会掩盖字体指标中的字距调整信息,但幸运的是,很少需要在不可见的基础上使用可见的下标。

相关内容