我不确定使用\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
)。如果不是,它会尝试插入它。因此,可以谨慎地考虑使用它的可选性。
该
\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% }% }}