amsmath
宏包用户指导手册 本文章翻译自《User’s Guide for the amsmath Package》,原文链接:http://mirrors.acm.jhu.edu/ctan/macros/latex/required/amslatex/math/amsldoc.pdf 。本文的版本是:Version 2.0 美国数学协会(AMS)修订。
在LaTeX中,amsmath
宏包提供了各种各样的功能,目的是为改善信息结构,并且改善打印输出包含数学公式的文档,使之更加的美观。不熟悉LaTeX的读者应该去参考文献7,如果你对LaTeX的版本做了更新,amsmath
通常会一起进行升级。升级信息将被在:http://www.ams.org/publications/authors/tex/amsmath 或者: ftp://ftp.ams.org/pub/tex/ 得到。
本文档描述了amsmath
宏包的特征,并且讨论了他们的使用方法。同时amsmath
也覆盖了一些辅助工具包,如:amsbsy
、amstext
、amscd
、amsxtra
、amsopn
。他们都与公式的内容有关系。对于额外的数学符号或者数学字体的信息,请参见:http://www.ams.org/publications/authors/tex/amsmath 。
如果你是一个长时间的LaTeX用户,那么你应该有许多的你想写的数学运算,也许对于一些熟悉的问题你能够在amsmath
宏包中找到解决方案:
用一个方便的方法去定义一个新的类似于\sin
和\lim
的’operator name’命令,包括适当的间隔并且同时能够自动的选择合适的字体样式和字体的大小。
对于eqnarray
环境有很多的替代方案,这些替代方案能够将公式组织的更好并且更加容易去书写。
公式的编号自动向上向下的调整,避免被覆盖,不像eqnarray
环境。
在公式环境中,围绕等号标记的间距应该是一样的,不像eqnarray
环境那样大的间距。
一种方法的辩题,这种辩题能够自动的提供编号。
提供子排序的公式编号,例如1.3a和1.3b,这样的形式。
amsmath
最主要的包,提供了许多呈现公式和其他数学结构的特征。
amstext
提供了\text
命令去排版类似于分段函数中条件的片段。
amsopn
提供给了\DeclareMathOperator
命令去定义一个新的’operator name’。
amsbsy
因为向后的兼容性,这个包仍然能够被使用,但是官方建议使用最新的bm
包去代替这个旧的包。
amscd
提供了CD
环境。
amsxtra
暂时不明白它的功能
amsmath
宏包集合了amstext
、amsbsy
、amsopn
。对于amscd
、amsxtra
仅仅可以去调用使用。
amsmath
宏包的可选参数 amsmath
宏包包含了下面的一些可选参数:
centertags
(default) 对于进行split操作的公式,公式的编号会垂直的放在所有公式的高度的中间,输入下面的代码:\documentclass[utf8]{ctexart}
\usepackage{amsmath}%可选参数默认default
\begin{document}
\begin{equation}
\begin{split}
a^2 + b^2 &= c^2 \\
AB^2 +AC^2 &= BC^2
\end{split}
\end{equation}
\end{document}
代码的执行结果为:
tbtags
“Top-or-bottom-tags”:对于一个进行split操作的公式,如果公式的编号是在右边的话,在公式的最后一行放置公式的编号,反之,如果公式的编号是在公式的左边,则放置在第一行。输入下面的代码:\documentclass[utf8]{ctexart}
\usepackage[tbtags]{amsmath} %可选参数tbtags
\begin{document}
\begin{equation}
\begin{split}
a^2 + b^2 &= c^2 \\
AB^2 +AC^2 &= BC^2
\end{split}
\end{equation}
\end{document}
上述代码的执行结果如下:
sumlimits
(default) 在类似与求和、求积的公式中,将公式的上下限放在符号的正上方和正下方,默认的情况下是放在正上下方。nosumlimits
在类似求和等公式中,采用这个参数将公式的上下限放置在符号的侧面。看下面的代码:\documentclass[utf8]{ctexart}
\usepackage[tbtags]{amsmath}
\begin{document}
\begin{align}
\sum\limits_1^{10} {{n^2}} \\
\sum\nolimits_2^{100} {{n^2}}
\end{align}
\end{document}
上面代码的执行结果为:
从上图可以看出,对于求和公式这种样式的公式,其上下限的位置有两种,一种是在符号的正上下方,另一种是在符号的右侧。
intlimits
和nointlimts
积分符号同样也和上面一样,将积分的上下限写在符号的正上方还是写在符号的右侧方,同样需要作者去衡量。
namelimits
和nonamelimits
对于一些有上下限的公式具有上面的这种考量,也就是将上下限究竟放在符号的正上下方还是放在符号的右侧方。
上面可选参数的使用,通过使用下面的格式usepackage[可选参数1,可选参数2,可选参数3···]{amsmath}
,其中可以同时选择多个参数,但是多个参数要放在一个[]
中,不能采用usepackage[可选参数1][可选参数2]···[可选参数n]{amsmath}
这样的形式。举例如下:
\documentclass[utf8,leqno]{ctexart}
\usepackage[sumlimits,tbtags]{amsmath}
\begin{document}
\begin{align}
\sum_1^{10} {{n^2}} \\
\sum_2^{100} {{n^2}}
\end{align}
\end{document}
amsmath
宏包也可以识别下面的可选项,这些可选项命令可以放在\documentclass
中,例如\documentclass[utf8,leqno]{ctexart}
,在amsmath
宏包中可以识别上面的leqno
选项,并且在amsmath
宏包的使用过程中不用重复的设置leqno
可选项。
leqno
将公式的编号放在左边
reqno
将公式的编号放在右边
fleqn
将公式放置在左侧边框的缩进处,而不是放在文本的正中间,下面的代码说明这个可选项的含义:
\documentclass[utf8,leqno,fleqn]{ctexart}
\usepackage[sumlimits,tbtags]{amsmath}
\begin{document}
\begin{align}
\sum_1^{10} {{n^2}} \\
\sum_2^{100} {{n^2}}
\end{align}
\end{document}
得到的结果如下:
对比不加fleqn
可选项的公式的放置,代码如下:
\documentclass[utf8,leqno]{ctexart}
\usepackage[sumlimits,tbtags]{amsmath}
\begin{document}
\begin{align}
\sum_1^{10} {{n^2}} \\
\sum_2^{100} {{n^2}}
\end{align}
\end{document}
amsmath
宏包提供了许多可选的公式呈现结构,下面提供了一些在LaTeX中基本的结构:
equation | equation* | align | align* |
---|---|---|---|
gather | gather* | flalign | flalign* |
multline | multline* | alignat | alignat* |
split | eqnarray |
(注意:尽管标准的eqnarray
环境仍然是可用的,但是最好使用align
环境或者equation+split
环境代替),在另一篇翻译的文章中我讨论了这个问题,详见:http://blog.csdn.net/jpzhu16/article/details/50706486 。
除了split
环境,剩下的每一个环境都有带*和不带*两种格式,其中不带*的环境会自动使用LaTeX的公式计数器进行编号。你也可以强制的使用\notag
或者\nonumber
将公式的编号去掉(也就是使当前的公式没有编号),你也可以通过使用\tag{标签}
自己去定义公式的标签,标签可以是任意的文本,诸如:*、ii、或者数字。也可以使用\tag*
命令,这个命令会去掉标签左右的括号,见下面的代码:
\documentclass[utf8,leqno]{ctexart}
\usepackage[sumlimits,tbtags]{amsmath}
\begin{document}
\begin{align}
\sum_1^{10} {{n^2}} \tag{求和} \\
\sum_2^{100} {{n^2}} \tag*{求和}
\end{align}
\end{document}
上面代码的执行结果如下:
同样,\tag
和\tag*
命令也被用在没有编号的公式中。split
环境是被使用在其它环境的内部,也就是嵌套的使用在其它环境里面,并不能单独的使用。但是它不能被使用在multline
环境中。看下面的代码:
\documentclass[utf8,fleqn]{ctexart}
\usepackage[sumlimits]{amsmath}
\begin{document}
\begin{align}
\begin{split}
\sum_1^{10} {{n^2}} \\
\sum_2^{100} {{n^2}}
\end{split}
\end{align}
\end{document}
上述代码的执行结果为:
注:使用split
环境之后,公式的编号默认会放在所有公式的正中间,通过tbtags
参数可以进行设置,将其放在top或者bottom。
在一些结构中做对齐操作(比如split
、align
和其环境的变体),在关系符号之前有一个&符号,如果要是在关系符号之后加&的话,必须是{}&这种结构,不像eqnarray
环境,可以随意的实现在关系符号之前和之后加&。
equation
环境是一个带有自动编号的单一的公式环境。equation\*
环境不带自动的编号。在原文中有一组公式的对比,再次省略了这组公式,因为本身的使用没有任何的难度,请参见原文 Table 3.1 。
split
环境不能使用的公式–multline
环境multline
环境是equation
环境的变种,这个环境被使用在公式不能被放在一行内(或者说公式很长不适宜放在单一的行上,或者说放在单一的行上公式的排版十分的不舒服,此时可以使用multline
环境代替equation
环境)。multline
环境的第一行将被放在最左边的边界处,最后一行将被放在最右边的边界处,就像equation
环境那样,multline
环境只有一个公式号,因此这个环境不能使用\tag
标记行,当有reqno
时公式的编号被放在最后一行,当有leqno
时,公式的编号被放在第一行,split
环境在multline
中是不能使用的。像下面的代码那样:
\documentclass[utf8]{ctexart}
\usepackage[leqno]{amsmath}
\begin{document}
\begin{multline}
\framebox[.65\columnwidth]{A}\\
\framebox[.5\columnwidth]{B}\\
\shoveright{\framebox[.55\columnwidth]{C}}\\
\framebox[.65\columnwidth]{D}
\end{multline}
\end{document}
上面代码得到的结果如下图:
像multline
环境那样,split
环境也可以用于一个公式太长不得不分开成为多行的情况。但是不像multline
环境,split
环境使用&符号去标记对齐的位置,不像其他的amsmath
环境结构,split
环境不提供公式编号,这是因为它原本是用在其它环境的内部嵌套使用,这些外部的环境通常是equation
、align
、gather
环境,这些环境会提供公式的编号。
\documentclass[utf8]{ctexart}
\usepackage[leqno]{amsmath}
\begin{document}
\begin{equation}
\begin{split}
a^2 + b^2 &= c^2\\
aaaaaaaaa^2 + bbbbbbbb^2 &= cccccc^2
\end{split}
\end{equation}
\end{document}
这段代码得到的结果如下:
或者采用下面的代码:
\documentclass[utf8]{ctexart}
\usepackage{leqno}{amsmath}
\begin{document}
\begin{equation}
\begin{split}
a^2 + b^2 ={}&c^2\\
aaaaaaaaa^2 + bbbbbbbb^2 ={}&cccccc^2
\end{split}
\end{equation}
\end{document}
这段代码的执行结果仍然和上面的结果是一样的。
在LaTeX中,如果你想有一个公式编号,这个公式编号包含接信息,蔽日你有一个公式编号是:(1.1),(1.2),(2.1)···分别代表的是section 1和section 2的公式,amsmath
宏包提供了一个\numberwithin
命令,如果这个公式的编号尝试用节(section),使用numberwithin{equation}{section}
,如果公式尝试用字节(subsection),那么采用\numberwithin{equation}{subsection}
命令来实现。只要在导言区加上上述的命令,整个这一节提供的公式环境的计数器都会按照这个定义去工作,这点是笔者一定要注意的。
引用上面的公式采用的是\eqref
命令,这个命令会自动提供(),如:if \ref(前面定义的标签) produces 某个公式编号 but \eqref produces (某个公式编号).
amsmath
宏包提供了一个子公式环境subequations
,千万不要写成subequation
,最后少了一个s,后者完全不能通过编译。该环境使得容易给一个组内的公式进行适当的编号,例如:
\begin{subequations} \label{eq:sub} %\eqref时产生组公式的大编号(如3.1),不包括具体的a或者b
\begin{equation} \label{eq:sub1} %\eqref时产生具体的编号(如3.1a)
这个公式被编号为:eq.a
\end{equation}
···
\begin{equation}\label{eq:sub2} %\eqref时产生具体的编号(如3.1b)
这个公式被编号为:eq.b
\end{equation}
\end{subequations}
\left
、\right
命令用于在数学公式中增加分隔符,比如:\left{
、\right}
代表在整个环境中添加{}符号,同样这种语法也适用与()、[]等分隔符,当分隔符不是成对出现时,也要使用\left
、\right
命令,只不过在不对称的一方采用.
去代替。如下图:
\text
命令\text
命令通常用于在一些场合插入一段文本。