LaTeX
方程编号 方程环境会自动为你的方程编号:
\begin{equation} f(x)=(x+a)(x+b) \end{equation}
你还可以使用 \label 和 \ref(或者 amsmath 包中的 \eqref)命令为方程添加标签和引用。例如,对于方程编号 1,使用 \ref 会得到 1,而 \eqref 会得到 (1):
\begin{equation} \label{eq:someequation} 6^2 - 5 = 36 - 5 = 31 \end{equation}
这会引用方程 \ref{eq:someequation}:
\begin{equation} \label{eq:erl} a = bq + r \end{equation}
其中 \eqref{eq:erl} 对于 和 为整数且 时为真。
进一步的说明在标签和交叉引用章节中。
如果希望方程编号跟随章节或子章节的编号,你必须使用 amsmath 包或 AMS 类文档。然后在导言中输入:
\numberwithin{equation}{section} 以使方程编号从章节开始编号,或者
\numberwithin{equation}{subsection} 以使方程编号从子章节开始编号。
\documentclass[12pt]{article}
\usepackage{amsmath}
\numberwithin{equation}{subsection}
\begin{document}
\section{First Section}
\subsection{A subsection}
\begin{equation}
L' = {L}{\sqrt{1-\frac{v^2}{c^2}}}
\end{equation}
\end{document}
如果你遵循的风格要求在序号后加点(如波兰排版中要求),则上述示例中的方程编号会呈现为 (1.1.1)。
如果希望去除多余的点,在 \numberwithin{equation}{section} 后面添加以下命令:
\renewcommand{\theequation}{\thesection\arabic{equation}}
对于使用 \numberwithin{equation}{subsection} 的编号方案,使用:
\renewcommand{\theequation}{\thesubsection\arabic{equation}}
在文档的导言部分。
注意:虽然看起来 \renewcommand 似乎能单独工作,但它并不会在每个新章节开始时重置方程编号。它必须与每个新章节开始时手动重置方程编号结合使用,或者使用更简洁的 \numberwithin。
从属方程编号 要为从属方程编号,可以将包含它们的部分放在 subequations 环境中:
\begin{subequations}
\label{eq:Maxwell}
Maxwell's equations:
\begin{align}
B'&=-\nabla \times E, \label{eq:MaxB} \\
E'&=\nabla \times B - 4\pi j, \label{eq:MaxE}
\end{align}
\end{subequations}
Maxwell's equations:
引用从属方程有两种方法:一种是在 \begin{subequations} 命令后添加标签,如 \label{eq:Maxwell},这将引用主方程 (1.1),另一种是在每行末尾、\ 命令前添加标签,这将引用子方程 (1.1a 或 1.1b)。如示例所示,如果需要两种类型的引用,也可以同时添加两者的标签。
垂直对齐显示数学 在显示环境(displaymath 和 equation)中常见的问题是无法跨越多行进行对齐。虽然可以单独定义每一行,但这些行将不会对齐。
上标和下标
\overset 和 \underset 命令用于将符号放置在表达式的上方或下方。如果没有使用 AMS-TeX,可以通过 \stackrel 实现相同的效果。这个功能特别适用于创建新的二元关系:
或者用来展示洛必达法则的应用:
为了方便定义一个新的运算符来设置带有 H 和给定分数的等号,可以使用以下命令:
\newcommand{\Heq}[1]{\overset{\left[#1\right]}{\underset{\mathrm{H}}{=}}}
这样上述示例可以简化为:
如果目的是对方程的某些部分进行注释,\overbrace 和 \underbrace 命令可能会更有用。但是,它们有不同的语法(可以与 \vphantom 命令对齐):
有时,注释可能比被注释的公式还要长,这可能会导致间距问题。这些问题可以使用 \mathclap 命令去除:
或者,使用 \underbracket 和 \overbracket 命令来替代花括号:
可选参数分别设置规则的厚度和括号的高度:
\underbracket[rule thickness][bracket height]{argument}_{text below}
\xleftarrow 和 \xrightarrow 命令生成的箭头将延伸到文本的长度。语法不同:可选参数(使用 [ 和 ])指定下标,强制参数(使用 { 和 })指定上标(如果为空,可以插入空格)。
对于更可扩展的箭头,必须使用 mathtools 包:
\begin{gather} a \xleftrightarrow[under]{over} b\ A \xLeftarrow[under]{over} B\ B \xRightarrow[under]{over} C\ C \xLeftrightarrow[under]{over} D\ D \xhookleftarrow[under]{over} E\ E \xhookrightarrow[under]{over} F\ F \xmapsto[under]{over} G\ \end{gather}
对于钩形箭头:
\begin{gather} H \xrightharpoondown[under]{over} I\ I \xrightharpoonup[under]{over} J\ J \xleftharpoondown[under]{over} K\ K \xleftharpoonup[under]{over} L\ L \xrightleftharpoons[under]{over} M\ M \xleftrightharpoons[under]{over} N \end{gather}
align 和 align* align 和 align* 环境通过 amsmath 包提供,用于排列多行方程。与矩阵和表格一样,\ 用于指定换行,& 用于指示对齐点。
align* 环境用法与 displaymath 或 equation* 环境相同:
\begin{align*} f(x) &= (x+a)(x+b) \ &= x^2 + (a+b)x + ab \end{align*}
注意,align 环境不能嵌套在 equation(或类似的)环境中。相反,align 是这种环境的替代;align 内的内容自动放置在数学模式中。
align* 会抑制编号。要强制在特定行上编号,可以在行换行前使用 \tag{...} 命令。
align 类似,但会自动给每行编号,就像 equation 环境一样。可以通过在换行前放置 \label{...} 来引用单独的行。可以使用 \nonumber 或 \notag 命令来抑制某一行的编号:
\begin{align} f(x) &= x^4 + 7x^3 + 2x^2 \nonumber \ &\qquad {} + 10x + 12 \end{align}
更复杂的对齐
可以通过在单行上添加多个 & 来指定多个“方程列”,每个方程列都可以对齐。以下示例演示了 align* 的对齐规则:
f(x) &= a x^2 + b x + c & g(x) &= d x^3 \\ f'(x) &= 2 a x + b & g'(x) &= 3 d x^2跨多行的括号
如果希望一个括号跨越新的一行,可以使用以下方法:
在这种构造中,尽管使用了 \left{ 和 \right},左侧和右侧的括号大小并不会自动相等。这是因为每一行都被排版为一个完全独立的方程——注意使用了 \right. 和 \left.,确保每行内没有未配对的 \left 和 \right 命令(如果公式在一行内,这些命令是不需要的)。你可以通过 \big、\Big、\bigg 和 \Bigg 命令手动控制括号的大小。
另一种方法是使用 \vphantom 命令复制较高方程的高度到另一行:
A &= \left(\int_t XXX \right.\nonumber\\ &\qquad \left.\vphantom{\int_t} YYY \dots \right) A = \left(\int_t XXX \right. YYY \dots \right)用于分段函数的对齐括号
你还可以使用 \left{ 和 \right. 来排版分段函数:</p> <math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> <semantics> <mrow> <mi>f</mi> <mo stretchy="false">(</mo> <mi>x</mi> <mo stretchy="false">)</mo> <mo>=</mo> <mrow> <mo fence="true">{</mo> <mtable rowspacing="0.16em" columnalign="left right" columnspacing="1em"> <mtr> <mtd> <mstyle scriptlevel="0" displaystyle="false"> <msup> <mi>x</mi> <mn>2</mn> </msup> </mstyle> </mtd> <mtd> <mstyle scriptlevel="0" displaystyle="false"> <mrow> <mo>:</mo> <mi>x</mi> <mo><</mo> <mn>0</mn> </mrow> </mstyle> </mtd> </mtr> <mtr> <mtd> <mstyle scriptlevel="0" displaystyle="false"> <msup> <mi>x</mi> <mn>3</mn> </msup> </mstyle> </mtd> <mtd> <mstyle scriptlevel="0" displaystyle="false"> <mrow> <mo>:</mo> <mi>x</mi> <mo>≥</mo> <mn>0</mn> </mrow> </mstyle> </mtd> </mtr> </mtable> </mrow> </mrow> <annotation encoding="application/x-tex">f(x) = \left\{ \begin{array}{lr} x^2 & : x < 0\\ x^3 & : x \ge 0 \end{array} \right.
cases 环境
cases 环境允许写分段函数:
LaTeX 将负责定义和对齐列。
在 cases 环境中,文本样式的数学符号被使用,结果如:
dcases 环境
可以使用 mathtools 包中的 dcases 环境来替代显示样式:
dcases 环境*
当第二列大多是普通文本时,可以使用 dcases* 环境以文档的常规 Roman 字体设置:
f(x) = \[ \begin{dcases*} x & \text{when } x \text{ is even} \ -x & \text{when } x \text{ is odd} \end{dcases*} \] f(x) = \[ \begin{dcases*} x & \text{when } x \text{ is even} \ -x & \text{when } x \text{ is odd} \end{dcases*} \]其他环境
虽然 align 和 align* 是最常用的环境,但也有几个其他可能感兴趣的环境:
环境名称 | 描述 | 备注 |
---|---|---|
eqnarray 和 eqnarray* | 类似于 align 和 align* | 不推荐使用,因为排版间距不一致 |
multline 和 multline* | 第一行左对齐,最后一行右对齐 | 方程编号与第一行对齐,而不是像其他环境一样居中 |
gather 和 gather* | 连续方程,不对齐 | |
flalign 和 flalign* | 类似于 align,但第一列左对齐,最后一列右对齐 | |
alignat 和 alignat* | 需要指定列数,允许控制方程间的水平间距 | 该环境需要一个参数,指定“方程列数”:计算每行中最多的 & 的数量,加1并除以2 |
不形成数学环境的环境
还有一些环境本身不形成数学环境,但可以作为更复杂结构的构建块:
数学环境名称 | 描述 |
---|---|
gathered[1] | 允许将方程设置在彼此之下。 |
split[1] | 类似于 align,但用于另一个显示数学环境内,仅支持单个方程列(即单个 & 符号)。 |
aligned[1] | 类似于 align,用于另一个数学环境内。 |
alignedat[1] | 类似于 alignat,并且同样需要一个额外参数,指定要设置的方程列数。它可以嵌套在 alignat 中。 |
例如:
\begin{equation} \left.\begin{aligned} B'&=-\partial \times E,\ E'&=\partial \times B - 4\pi j, \end{aligned} \right} \qquad \text{Maxwell's equations} \end{equation}
{\displaystyle \left.{\begin{aligned}B'&=-\partial \times E,\E'&=\partial \times B-4\pi j,\end{aligned}}\right}\quad {\text{Maxwell's equations}}}
\begin{alignat}{2} \sigma_1 &= x + y &\quad \sigma_2 &= \frac{x}{y} \ \sigma_1' &= \frac{\partial x + y}{\partial x} & \sigma_2' &= \frac{\partial \frac{x}{y}}{\partial x} \end{alignat}
\begin{gather*} a_0 = \frac{1}{\pi} \int_{-\pi}^{\pi} f(x) , \mathrm{d}x \[6pt] \begin{split} a_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(x) \cos(nx) , \mathrm{d}x = \ = \frac{1}{\pi} \int_{-\pi}^{\pi} x^2 \cos(nx) , \mathrm{d}x \end{split} \[6pt] \begin{split} b_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(x) \sin(nx) , \mathrm{d}x = \ = \frac{1}{\pi} \int_{-\pi}^{\pi} x^2 \sin(nx) , \mathrm{d}x \end{split} \[6pt] \end{gather*}
缩进方程
要缩进方程,可以在文档类中设置 fleqn,然后指定 \mathindent 变量的特定值:
\documentclass[a4paper,fleqn]{report}
\usepackage{amsmath}
\setlength{\mathindent}{1cm}
\begin{document}
\noindent Euler's formula is given below:
\begin{equation*}
e^{ix} = \cos{x} + i \sin{x}.
\end{equation*}
\noindent This is a very important formula.
\end{document}
\[
\documentclass[a4paper,fleqn]{report}
\usepackage{amsmath}
\setlength{\mathindent}{1cm}
\begin{document}
\noindent Euler's formula is given below:
\begin{equation*}
e^{ix} = \cos{x} + i \sin{x}.
\end{equation*}
\noindent This is a very important formula.
\end{document}
\]
数学环境中的分页
要建议 LaTeX 在 amsmath 环境内部插入分页,可以在换行前使用 \displaybreak 命令。与 \pagebreak 类似,\displaybreak 可以接受一个可选参数(从 0 到 4),表示分页的优先级。0 表示“允许在此处分页”,4 强制分页。如果没有参数,则默认为 4。
另外,你可以使用 \allowdisplaybreaks 启用数学环境中的自动分页。它同样可以有一个可选参数,表示方程分页的优先级。1 表示“允许分页,但避免分页”,4 表示“随时分页”。你可以使用 \* 来禁止某一行后的分页。
LaTeX 会在长方程中插入分页,如果有额外文本使用 \intertext{},且没有其他命令:
例如:
\begin{align*}
&\vdots\\
&= 12 + 7 \int_0^2 \left( -\frac{1}{4} \left(e^{-4t_1} + e^{4t_1-8} \right) \right) \, dt_1 \displaybreak[3] \\
&= 12 - \frac{7}{4} \int_0^2 \left( e^{-4t_1} + e^{4t_1-8} \right) \, dt_1 \\
&\vdots %
\end{align*}
\[
\begin{align*}
&\vdots\\
&= 12 + 7 \int_0^2 \left( -\frac{1}{4} \left(e^{-4t_1} + e^{4t_1-8} \right) \right) \, dt_1 \displaybreak[3] \\
&= 12 - \frac{7}{4} \int_0^2 \left( e^{-4t_1} + e^{4t_1-8} \right) \, dt_1 \\
&\vdots %
\end{align*}
\]分页控制
在显示数学环境(所有形式)之前的分页由 \predisplaypenalty
控制。默认值为 10000,表示在显示之前永远不会分页。Knuth(TeXbook 第 19 章)解释了这是打印机的传统——不希望在页面开头有显示的方程式。可以通过以下方式放宽此限制:
\predisplaypenalty=0
有时,为了让方程与前面的文本保持一起,可能需要设置较高的分页惩罚,例如,对于一个单行段落和一个单行方程,尤其是在章节末尾。
带框方程
对于单个方程或对齐构建块,并且标签在框外,可以使用 \boxed{}
:
\begin{equation}
\boxed{x^2 + y^2 = z^2}
\end{equation}
如果想要整个行或多个方程被框起来,可以在 \fbox{}
内使用 minipage
:
\fbox{
\addtolength{\linewidth}{-2\fboxsep}%
\addtolength{\linewidth}{-2\fboxrule}%
\begin{minipage}{\linewidth}
\begin{equation}
x^2 + y^2 = z^2
\end{equation}
\end{minipage}
}
还有 mathtools
包中的 \Aboxed{}
,它能够跨越对齐标记进行框住:
\begin{align*}
\Aboxed{ f(x) & = \int h(x)\, dx} \\
& = g(x)
\end{align*}
自定义运算符
尽管 LaTeX 中提供了许多常见的运算符,有时你需要编写自己的运算符,例如为了排版 argmax
运算符。使用 \operatorname
和 \operatorname*
命令[1]可以显示自定义运算符;*
版本会像 \lim
运算符那样在下面加上下划线:
\[
\operatorname{arg\,max}_a f(a)
= \operatorname*{arg\,max}_b f(b)
\]
然而,如果运算符频繁使用,建议定义一个新的运算符,这样可以在整个文档中使用。使用 \DeclareMathOperator
和 \DeclareMathOperator*
命令[1],它们应当在文档的导言部分声明:
\DeclareMathOperator*{\argmax}{arg\,max}
这将定义一个新的命令,可以在正文中引用:
\[
\argmax_c f(c)
\]
高级格式化
限制
对于 lim
运算符,默认情况下其下标和上标通常放置在符号下方:
\begin{equation}
\lim_{a\to \infty} \tfrac{1}{a}
\end{equation}
如果希望覆盖此行为,可以使用 \nolimits
运算符:
\begin{equation}
\lim\nolimits_{a\to \infty} \tfrac{1}{a}
\end{equation}
在行内文本中的 lim
(例如在 $...$
中)会将其限制条件放在符号的旁边,以避免额外的空白。若要覆盖此行为,使用 \limits
命令。
类似地,可以将下标放在通常位于旁边的符号下方:
\begin{equation}
\int_a^b x^2 \mathrm{d} x
\end{equation}
若要将限制放置在下方:
\begin{equation}
\int\limits_a^b x^2 \mathrm{d} x
\end{equation}
更改求和类型符号的位置
要将求和类型符号的默认位置更改为侧边,可以在 amsmath
包中添加 nosumlimits
选项。要更改积分符号的位置,可以添加 intlimits
选项。对于命名运算符(如 det
、min
、lim
等),可以使用 nonamelimits
来改变默认行为。
生成单边限制
要生成单边限制,可以使用 \underset
命令,如下所示:
\begin{equation}
\lim_{a \underset{>}{\to} 0} \frac{1}{a}
\end{equation}
下标和上标
你可以使用 \nolimits
在求和符号等符号中将符号放在下标或上标位置:
\begin{equation}
\sum\nolimits' C_n
\end{equation}
通常的符号用法中无法混合它们:
\begin{equation}
\sum_{n=1}\nolimits' C_n
\end{equation}
添加一个质数和限制符号
要为符号同时添加一个质数和限制符号,可以使用 \sideset
命令:
\begin{equation}
\sideset{}{'}\sum_{n=1}C_n
\end{equation}
该命令非常灵活:例如,若要在符号的每个角落放置字母,可以使用此命令:
\begin{equation}
\sideset{_a^b}{_c^d}\sum
\end{equation}
如果希望将字母放置在任意符号的角落,应该使用 \fourIdx
命令(需要 fouridx
包)。
但简单的分组也可以解决问题:
\begin{equation}
{\sum\limits_{n=1}}'C_n
\end{equation}
因为数学运算符可以有限制或没有限制。如果你想改变它的状态,只需将其分组。你可以将其作为另一个数学运算符,然后可以再次使用限制符。
多行下标
要生成多行下标,可以使用 \substack
命令:
\begin{equation}
\prod_{\substack{
1\le i \le n\\
1\le j \le m}}
M_{i,j}
\end{equation}
对齐数学显示中的文本
要在数学环境中添加小插入,可以使用 \intertext
命令:
\begin{minipage}{3in}
\begin{align*}
\intertext{If}
A &= \sigma_1 + \sigma_2 \\
B &= \rho_1 + \rho_2 \\
\intertext{then}
C(x) &= e^{Ax^2 + \pi} + B
\end{align*}
\end{minipage}
注意,使用该命令不会改变对齐方式。
此外,在上述示例中,可以使用 mathtools
包中的 \shortintertext{}
命令,代替 \intertext
,以减少行间添加的垂直空白。
更改字体大小
有时你可能希望控制字体大小。例如,使用文本模式数学时,默认情况下一个简单的分数会像这样显示:
而你可能更希望它以较大的显示模式样式显示,但仍保持在行内,如下所示:
一种简单的方法是利用数学元素的预定义大小:
大小命令 | 描述 |
---|---|
\displaystyle | 用于显示模式中的方程式 |
\textstyle | 用于文本模式中的方程式 |
\scriptstyle | 用于第一个下标/上标 |
\scriptscriptstyle | 用于后续的下标/上标 |
一个经典的例子是排版连分数(尽管更好的方法是使用 \cfrac
命令[1],该命令在《数学》章节中描述,而不是下面提供的方法)。以下代码提供了一个示例:
\begin{equation}
x = a_0 + \frac{1}{a_1 + \frac{1}{a_2 + \frac{1}{a_3 + a_4}}}
\end{equation}
如你所见,随着分数的继续,它们变得越来越小(尽管它们不会比此示例中的还要小,因为它们已经达到了 \scriptstyle
限制)。如果你希望保持大小一致,可以将每个分数声明为使用显示模式样式;例如:
\begin{equation}
x = a_0 + \frac{1}{\displaystyle a_1
+ \frac{1}{\displaystyle a_2
+ \frac{1}{\displaystyle a_3 + a_4}}}
\end{equation}
另一种方法是使用 \DeclareMathSizes
命令选择你偏好的大小。你只能为 \displaystyle
、\textstyle
等定义大小。一个潜在的缺点是,此命令设置了全局的数学字体大小,因为它只能在文档的导言部分使用。
但是它非常容易使用:\DeclareMathSizes{ds}{ts}{ss}{sss}
,其中 ds
是显示模式大小,ts
是文本模式大小,依此类推。你输入的值假定是点(pt)大小。
请注意,只有当第一个参数的值与当前文档的文本大小匹配时,修改才会生效。因此,通常可以在导言中看到一组声明,以应对主字体发生变化的情况。例如:
\DeclareMathSizes{10}{18}{12}{8} % For size 10 text
\DeclareMathSizes{11}{19}{13}{9} % For size 11 text
\DeclareMathSizes{12}{20}{14}{10} % For size 12 text
强制所有数学公式使用 \displaystyle
在 \begin{document}
之前放置:
\everymath{\displaystyle}
这样可以强制文档中的所有数学公式使用 \displaystyle
。
调整显示数学公式周围的垂直空白
有四个参数控制显示数学公式周围的垂直空白:
\abovedisplayskip=12pt
\belowdisplayskip=12pt
\abovedisplayshortskip=0pt
\belowdisplayshortskip=7pt
短跳过(short skips)在前一行水平结束时会使用。如果公式之前的行较短,这些参数必须在 \begin{document}
之后设置。
剪贴板
待办事项: 考虑包含来自 mathtools 的内容。
注意事项
-
需要
amsmath
包 -
需要
mathtools
包