在 \intertext 前有必要加一个 \\ 吗?

在 \intertext 前有必要加一个 \\ 吗?

我不确定使用\intertext或哪一个是正确的\shortintertext\\在它们前面添加还是不添加。

\documentclass[preview,border=12pt]{standalone}
\usepackage{amsmath}
\begin{document}
\section*{Without a line break }
\begin{gather*}
E = mc^2
\intertext{Multiply both side by 2, we have}
2E = 2mc^2
\end{gather*}

\section*{With a line break}
\begin{gather*}
E = mc^2\\
\intertext{Multiply both side by 2, we have}
2E = 2mc^2
\end{gather*}
\end{document}

在此处输入图片描述

我没看出有什么不同。或者我的眼睛有问题。所以问题是:\\是否需要先给出\intertext\shortintertext

答案1

为了\intertext工作,它必须处于垂直模式,这意味着它应该遵循\\。但是,\intertext会检查是否是这种情况(...... \ifvmode\else\\\@empty\fi)。如果不是,它会尝试插入它。因此,可以谨慎地考虑使用它的可选性。

来自amsmath 文档(第 33 页起):

\intertext命令用于在对齐的行之间插入文本。最好将其作为环境来完成,但形式 \begingroup\begin导致\noalign失败。

\newcommand{\intertext}{\@amsmath@err{\Invalid@@\intertext}\@eha}

\intertext@由所有允许使用该 \intertext命令的环境调用。

\def\intertext@{%
  \def\intertext##1{%

如果当前模式不是 vmode,最可能的原因是作者忘记了\\应该在 之前的\intertext。好吧,那么让我们自己尝试添加它。但是,要稍微小心一点:\\是一个 Futurelet,当它被赋予像 这样的条件标记时,允许一个被赋予的标记在我们的内部代码中随意闯入是有点危险的\fi。所以让我们在 前面插入一些东西,\fi让 Futurelet 来代替。(再次小心:它必须是短暂的东西,而不是(例如) \relax会导致下一个 halign 单元启动并停止 \noalign工作的。)

    \ifvmode\else\\\@empty\fi
    \noalign{%
      \penalty\postdisplaypenalty\vskip\belowdisplayskip
      \vbox{\normalbaselines

如果外部环境是列表环境,我们需要做一些额外的事情。我暂时没有找到一种既简单又可靠的优雅方法来测试“我们是否在任何列表环境中”(例如,检查零\@totalleftmargin不会捕获 \@totalleftmargin为零但\linewidth小于的 情况\columnwidth),所以在我看来,检查\linewidth是最好的实用解决方案。

         \ifdim\linewidth=\columnwidth
         \else \parshape\@ne \@totalleftmargin \linewidth
         \fi
         \noindent##1\par}%
       \penalty\predisplaypenalty\vskip\abovedisplayskip%
     }%
}}

相关内容