为什么 \substack 不尊重其参数周围的水平空格?

为什么 \substack 不尊重其参数周围的水平空格?

以下 MCE 指出\substack不尊重其参数周围的水平空间:

\documentclass[fleqn]{article}
\usepackage{mathtools}
\begin{document}
\begin{gather*}
  (ab=0)                        \iff                     (a=0\text{ or } b=0)\\
  (ab=0) \substack{\displaystyle\iff\\\displaystyle\iff} (a=0\text{ or } b=0)
\end{gather*}
\end{document}

在此处输入图片描述

为什么会出现这种情况以及如何恢复原始空间?

答案1

您应该首先查看 的定义\iffamsmath.sty

\renewcommand{\iff}{\DOTSB\;\Longleftrightarrow\;}

\doubleiff现在您可以按照相同的方式定义命令,而不是滥用\substack

\documentclass{article}
\usepackage{amsmath}

\newcommand{\Doublelongleftrightarrow}{%
  \mathrel{%
    \vcenter{%
      \offinterlineskip
      \mathsurround=0pt
      \ialign{%
        ##\cr
        \noalign{\vspace{0.25ex}}
        $\Longleftrightarrow$\cr
        \noalign{\vspace{0.5ex}}
        $\Longleftrightarrow$\cr
      }%
    }%
  }%
}

\newcommand{\doubleiff}{\DOTSB\;\Doublelongleftrightarrow\;}

\begin{document}

\begin{gather*}
  (ab=0) \iff       (a=0\text{ or } b=0)\\
  (ab=0) \doubleiff (a=0\text{ or } b=0)
\end{gather*}

\end{document}

在此处输入图片描述

笔记。由于 Computer Modern 字体中箭头的边界框很特殊,因此需要这些\vspace说明。不同的数学字体可能不需要它们,或者需要不同的间距。

相关内容