使用带有和不带有 amsmath 的方程式是否有区别?

使用带有和不带有 amsmath 的方程式是否有区别?

据我了解,equation也可以不使用amsmath,但在 的用户指南中,amsmath我读到equation已集成在包中。使用或不使用amsmath会有什么不同吗?equationamsmath

答案1

如果我们尝试在以下文档¹上比较有和没有amsmath以及有和fleqn( 8 种可能的组合)的 LaTeX 输出:leqno

\begin{document}
And
\begin{equation}
  y=mx+b
\end{equation}

And here's a long line that es at least two-thirds of the width of the page.
\begin{equation}
  y=mx+b
\end{equation}

\end{document}

那么定义上的差异是怎么回事呢:

默认 LaTeX² ³:

\newenvironement{equation}{$$\refstepcounter{equation}} ❶
    {\eqno \hbox{\@eqnnum}$$\@ignoretrue} ❷

amsmath.sty:

\renewenvironment{equation}{%
  \incr@eqnum ❸
  \mathdisplay@push ❹
  \st@rredfalse ❸
  \global\@eqnswtrue ❸
  \mathdisplay{equation}% ❹
}{%
  \endmathdisplay{equation}% ❹
  \mathdisplay@pop ❹
  \ignorespacesafterend ❺
}

默认声明并不复杂:它使用普通的 TeX 约定$$...$$来标记显示数学⁴它使用\refstepcounter{equation}❶ 来增加计数器数字,并确保如果我们将 a 放入\label环境中,我们将获得方程编号equation。结尾的 ❸\eqno是一个原语,它表示后面的任何内容都应被视为方程编号,\hbox{\@eqnum}实际上会打印方程编号,并\@ignoretrue确保我们不必担心 LaTeX 认为后面的空格\end{equation}很重要。

那么为什么在 中看起来如此不同amsmath.sty?好吧,这部分是为了解决可能出现的方程编号问题,特别是考虑到amsmath能够隐藏可能在 中打印的方程编号\notag。⁵ 这就是标记为 ❸ 的行所发生的情况。⁶

标记为 ❹ 的行是 LaTeX 内核的进入和离开数学运算的更复杂版本$$。实际上,最大的区别在于错误上下文。如果我们使用纯 LaTeX 和 运行以下命令amsmath

And
\begin{equation}
  y=mx+b
And here's a long line that es at least two-thirds of the width of the page.
\begin{equation}
  y=mx+b \notag
\end{equation}

普通 LaTeX 将会响应:

! Missing $ inserted.

同时amsmath将给予

! LaTeX Error: Bad math environment delimiter.

最后一行 ❺ 的功能与 LaTeX 内核的\@ignoretrue.⁷相同

此功能发挥作用的另一个地方是如果您有嵌套的显示数学。“什么?”你可能会说。“不可能!”你会忘记 LaTeX 用户早餐吃不可能的事情。话虽如此,虽然评论谈到了这一点,但这种事情的格式在纯 LaTeX 和使用 LaTeX 时都是相同的,而且amsmath可以说两者都不正确。我让你自己运行它看看:

\begin{equation}
  \begin{minipage}{.5\linewidth}
    \begin{equation}
      y=mx+b
    \end{equation}
    \begin{equation}
      y=mx+b
    \end{equation}
  \end{minipage}
\end{equation}

更新在页边距上又发现了一个差异。如果你使用leqno文档选项将公式编号放在左侧,而 LaTeX 无法将公式编号和公式放在一行中,那么amsmath公式编号将多于方程式,而使用普通 LaTeX 时方程式编号为以下该等式。


  1. 这两个方程式用于比较居中显示的数学公式中短行和长行之间的间距是否相同。默认情况下,如果 [居中] 显示方程式之前的段落最后一行比指定阈值短,则 TeX 会假定所需的垂直空间较少。

  2. 如果你看一下源代码,LaTeX 实际上是用 来定义和\equation,而不是使用,但为了更容易比较,我在这里对定义进行了规范化。\endequation\def\newenvironment

  3. 为了简单起见,我将跳过左对齐方程的情况,因为这已经足够复杂了。

  4. \[这里已经把…\]$$…的区别$$说得很清楚了。自己去查一下吧。

  5. 至于为什么有人首先要\notag在环境中使用,equation

相关内容