暗示箭头与顶部文本的对齐

暗示箭头与顶部文本的对齐

我的证明通常是这样的:

\documentclass{article}
\usepackage{mathtools}
\begin{document}
    \begin{align}
        &\text{First Statement}\\
        &\implies \text{Second Statement}\\
        &\stackrel{\text{Explanation}}{\implies}\text{Third Statement}\\
        &\stackrel{\mathclap{\text{Explanation}}}{\implies} \text{Fourth Statement}
    \end{align}
\end{document}

已编译

问题是对齐考虑了整个 stackrel,而我希望它与蕴涵箭头对齐。我试过了,\stackrel{Explanation}{&\implies}但会抛出一个错误。如果解释不太长并且不触及蕴涵箭头后的语句,则 \mathclap 有效。

您对如何解决这个问题有什么建议吗?

答案1

\stackrel命令定义为

#1#2 → \mathrel{\mathop{#2}\limits^{#1}}

因此你可以\smashoperator使用mathtools包以消除上标左半部分引入的空格。我\smashstackrel在下面定义了一个\stackrel包含的版本\smashoperator。我认为\smashstackrel[l]它正是您想要的。我还定义了\feliximplies{<text>}让生活更简单。

\documentclass{article}

\usepackage{mathtools}

\newcommand*\smashstackrel[3][lr]{%
  \mathrel{\smashoperator[#1]{\mathop{#3}^{#2}}}
}

\newcommand*\feliximplies[1]{\smashstackrel[l]{\textnormal{#1}}{\implies}}

\begin{document}

\begin{align}
    &\text{First Statement}\\
    &\implies \text{Second Statement}\\
    &\smashstackrel[l]{\text{Explanation}}{\implies}\text{Third Statement}\\
    &\feliximplies{Explanation} \text{Fourth Statement}
\end{align}

\end{document}

输出


笔记:

  • 的可选参数\smashstackrel可以是[l][r]或者,[lr]取决于您是否要为了间距目的而忽略上标的左侧、右侧或两侧。

  • \implies定义为\DOTSB\;\Longrightarrow\;并产生一个可以拉伸的空间(默认情况下不会收缩)。如果使用(或) \;,则此空间将不再可拉伸,因此这样做感觉有点可疑。我认为\stackrel\smashstackrel

    \;\mkern-\thickmuskip\stackrel{<text>}{\implies}\;\mkern-\thickmuskip
    

    可能比 更合适\stackrel{<text>}{implies}。这正好重新插入了丢失的可拉伸量。(同样的注释适用于\smashstackrel\noLstackrel,它们定义如下。)

    但在这种情况下这并不重要,因为这里的空间无论如何都不会被拉伸。如果此命令在内联而不是在显示环境中使用,则会出现问题。

    简要说明:\;定义为\mskip\thickmuskip并插入长度为的水平空间\thickmuskip,默认情况下为,但必要时5mu可以拉伸至。类似于,但不允许拉伸。因此,在这种情况下删除水平空间,以便我们最终得到一个可以拉伸至的水平空间。参见10mu\mkern\mskip\mkern-\thickmuskip5mu0mu5mu这个答案有关间距命令的更多信息。

  • \smashstackrel相比之下的一个可能的缺点\stackrel是它总是以 排版\displaystyle。我在下面提供了一个\smashstackrel[l]不这样做的版本,因为在我突然想起 的存在之前我已经写过了\smashoperator

    \makeatletter %% <- make @ usable in command names
    \newcommand*\noLstackrel[2]{\mathpalette\noLstackrel@{{#1}{#2}}}
    \newcommand*\noLstackrel@[2]{\noLstackrel@@{#1}#2}
    \newcommand*\noLstackrel@@[3]{% #1 = \displaystyle etc., #2 = top, #3 = bottom
      \begingroup                           %% <- limit scope of boxes
        \sbox0{$\m@th#1\stackrel{#2}{#3}$}% %% <- put stackrel construction in box 0
        \sbox2{$\m@th#1#3$}%                %% <- put base symbol in box 2
        \hskip.5\wd2 \hskip-.5\wd0          %% <- remove excess width on the left
        \mathrel{\usebox0}%                 %% <- print box 0
      \endgroup
    }
    \makeatother  %% <- revert @
    

    用法:\noLstackrel{<stuff on top>}{\implies}

答案2

在了解了 Circumscribes 的答案后,阅读了 mathtools 上的文档\smashoperators,我发现了另一种可能的解决方案:\xRightarrow

\documentclass{article}
\usepackage{mathtools}
\begin{document}
    \begin{align}
        &\text{Statement}\\
        &\implies \text{implies arrow}\\
        &\xRightarrow{\text{Explanation}}\text{xRightarrow}\\
        &\xRightarrow{(*)} \text{xRightarrow}\\
        &\;\xRightarrow{(*)}\; \text{xRightarrow with ;}\\
        &\implies \text{implies arrow}\\
        &\;\xRightarrow{}\; \text{xRightarrow with ;}\\
        &\;\Rightarrow\; \text{Rightarrow with ;}
    \end{align}
\end{document}

导致:

结果

此解决方案的优点是,它利用了来自已知包的命令,这可能比自制解决方案的错误更少。而且它还允许使用下标。缺点从图中可以看出。\implies在箭头前插入一个空格,但这样xRightarrow做不行。(编辑:这可以在\;侧面修复,正如 Circumscribes 指出的那样,但仍然值得注意的是 xRightarrow 基于 Rightarrow,您可以从没有输入时的默认长度中看到)

因此,\implies您可能不得不使用\Rightarrow而不是 。其次,我不确定我是否在视觉上更喜欢不同长度的箭头,而不是超出通常\implies箭头宽度的解释。

答案3

你可以尝试eqnarray

\begin{eqnarray}
    && \text{First Statement}\\
    &\implies& \text{Second Statement}\\
    &\stackrel{\text{Explanation}}{\implies}&\text{Third Statement}\\
    &\stackrel{\mathclap{\text{Explanation}}}{\implies}& \text{Fourth Statement}
\end{eqnarray}

在此处输入图片描述

相关内容