据我了解,equation
环境是在amsmath
包中定义的,因此在尝试编译以下文档时可能会出现错误pdflatex
:
\documentclass{article}
\begin{document}
\begin{equation}
a=b+c
\end{equation}
\end{document}
但我在运行此文件时没有收到任何错误,并且生成了pdflatex
带有方程式的 PDF 输出。这究竟是如何工作的?a + b = c
答案1
你写了:
据我了解,
equation
环境是在amsmath
包中定义的
这不太正确。equation
环境是在 LaTeX 内核中定义的——和amsmath
如果包在前言中加载,则会重新定义。
为了完整起见,这里是文件latex.ltx
(“内核”)中的相关代码:
\@definecounter{equation}
\def\equation{$$\refstepcounter{equation}}
\def\endequation{\eqno \hbox{\@eqnnum}$$\@ignoretrue}
\def\@eqnnum{{\normalfont \normalcolor (\theequation)}}
其中\eqno
是所谓的“原始”指令,它\hbox{\@eqnnum}
以 作为其参数。基本上,\equation
启动显示数学模式并增加一个名为 的计数器equation
,而\endequation
排版方程编号(默认情况下在最右边)并关闭显示数学模式。
这是来自的代码amsmath.sty
;请注意,由于\renewenvironment
指令,该代码取代了内核提供的内容:
\renewenvironment{equation}{%
\incr@eqnum
\mathdisplay@push
\st@rredfalse \global\@eqnswtrue
\mathdisplay{equation}%
}{%
\endmathdisplay{equation}%
\mathdisplay@pop
\ignorespacesafterend
}
显然,此设置比 LaTeX 内核中执行的设置更为复杂。最重要的实质性差异来自这样一个事实:如果amsmath
加载了,则可以在环境中插入split
、aligned
和gathered
环境equation
。此外,amsmath
在后台执行一些奇特的测量操作,以确定是否有必要将方程编号“推低”一点,以避免与过长的方程发生冲突。
如果你真的对细节感兴趣,我鼓励你检查一下文件中包含的信息amsmath.pdf
。打开命令窗口并键入texdoc amsmath.pdf
以在 pdf 查看器中启动该文件。