方程编号 方程环境会自动为你的方程编号:

\begin{equation} f(x)=(x+a)(x+b) \end{equation} f ( x ) = ( x + a ) ( x + b ) f(x) = (x + a)(x + b)

你还可以使用 \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}: 6 2 5 = 36 5 = 31 ( 1 ) 6^2 - 5 = 36 - 5 = 31 \quad (1)

\begin{equation} \label{eq:erl} a = bq + r \end{equation}

其中 \eqref{eq:erl} 对于 a a b b 为整数且 b c b \neq c 时为真。

进一步的说明在标签和交叉引用章节中。

如果希望方程编号跟随章节或子章节的编号,你必须使用 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:

B = × E , (1.1a) E = × B 4 π j , (1.1b) \begin{aligned} B' &= -\nabla \times E, \quad \text{(1.1a)} \\ E' &= \nabla \times B - 4\pi j, \quad \text{(1.1b)} \end{aligned}

引用从属方程有两种方法:一种是在 \begin{subequations} 命令后添加标签,如 \label{eq:Maxwell},这将引用主方程 (1.1),另一种是在每行末尾、\ 命令前添加标签,这将引用子方程 (1.1a 或 1.1b)。如示例所示,如果需要两种类型的引用,也可以同时添加两者的标签。

垂直对齐显示数学 在显示环境(displaymath 和 equation)中常见的问题是无法跨越多行进行对齐。虽然可以单独定义每一行,但这些行将不会对齐。

上标和下标

\overset 和 \underset 命令用于将符号放置在表达式的上方或下方。如果没有使用 AMS-TeX,可以通过 \stackrel 实现相同的效果。这个功能特别适用于创建新的二元关系:

A = ! B ; A = ! B A \overset{!}{=} B; A \stackrel{!}{=} B

A = ! B ; A = ! B A \overset{!}{=} B; A \stackrel{!}{=} B

或者用来展示洛必达法则的应用:

lim x 0 e x 1 2 x = H [ 0 0 ] lim x 0 e x 2 = 1 2 \lim_{x\to 0}{\frac{e^x-1}{2x}} \overset{\left[\frac{0}{0}\right]}{\underset{\mathrm{H}}{=}} \lim_{x\to 0}{\frac{e^x}{2}}={\frac{1}{2}} lim x 0 e x 1 2 x = H [ 0 0 ] lim x 0 e x 2 = 1 2 \lim_{x\to 0}{\frac{e^x-1}{2x}} {\overset {\left[{\frac {0}{0}}\right]}{\underset {\mathrm {H}}{=}}} \lim_{x\to 0}{\frac {e^x}{2}} = {\frac{1}{2}}

为了方便定义一个新的运算符来设置带有 H 和给定分数的等号,可以使用以下命令:

\newcommand{\Heq}[1]{\overset{\left[#1\right]}{\underset{\mathrm{H}}{=}}}

这样上述示例可以简化为:

lim x 0 e x 1 2 x \Heq 0 0 lim x 0 e x 2 = 1 2 \lim_{x\to 0}{\frac{e^x-1}{2x}} \Heq{\frac{0}{0}} \lim_{x\to 0}{\frac{e^x}{2}}={\frac{1}{2}}

如果目的是对方程的某些部分进行注释,\overbrace 和 \underbrace 命令可能会更有用。但是,它们有不同的语法(可以与 \vphantom 命令对齐):

z = x real + i y imaginary complex number z = \overbrace{ \underbrace{x}_\text{real} + i \underbrace{y}_\text{imaginary} }^\text{complex number} z = x real + i y imaginary complex number z = \overbrace{ \underbrace{x}_\text{real} + i \underbrace{y}_\text{imaginary} }^\text{complex number}

有时,注释可能比被注释的公式还要长,这可能会导致间距问题。这些问题可以使用 \mathclap 命令去除:

y = a + f ( b x 0  by assumption ) = a + f ( b x 0  by assumption ) y = a + f(\underbrace{b x}_{ \ge 0 \text{ by assumption}}) = a + f(\underbrace{b x}_{ \mathclap{\ge 0 \text{ by assumption}}})

或者,使用 \underbracket 和 \overbracket 命令来替代花括号:

z = \overbracket [ 3 p t ] \underbracket x real + \underbracket [ 0.5 p t ] [ 7 p t ] i y imaginary complex number z = \overbracket[3pt]{ \underbracket{x}_{\text{real}} + \underbracket[0.5pt][7pt]{iy}_{\text{imaginary}} }^{\text{complex number}}

可选参数分别设置规则的厚度和括号的高度:

\underbracket[rule thickness][bracket height]{argument}_{text below}

\xleftarrow 和 \xrightarrow 命令生成的箭头将延伸到文本的长度。语法不同:可选参数(使用 [ 和 ])指定下标,强制参数(使用 { 和 })指定上标(如果为空,可以插入空格)。

A this way B or that way C A \xleftarrow{\text{this way}} B \xrightarrow[\text{or that way}]{ } C A this way B or that way C A \xleftarrow{\text{this way}} B \xrightarrow[\text{or that way}]{ } C

对于更可扩展的箭头,必须使用 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*}

f ( x ) = ( x + a ) ( x + b ) = x 2 + ( a + b ) x + a b f(x) = (x+a)(x+b) = x^2 + (a+b)x + ab

注意,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}

f ( x ) = x 4 + 7 x 3 + 2 x 2 + 10 x + 12 f(x) = x^4 + 7x^3 + 2x^2 + 10x + 12

更复杂的对齐

可以通过在单行上添加多个 & 来指定多个“方程列”,每个方程列都可以对齐。以下示例演示了 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 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 f(x) = a x^2 + b x + c \quad g(x) = d x^3 \\ f'(x) = 2 a x + b \quad g'(x) = 3 d x^2

跨多行的括号

如果希望一个括号跨越新的一行,可以使用以下方法:

f ( x ) = π {</mo> <msup> <mi>x</mi> <mn>4</mn> </msup> <mo>+</mo> <mn>7</mn> <msup> <mi>x</mi> <mn>3</mn> </msup> <mo>+</mo> <mn>2</mn> <msup> <mi>x</mi> <mn>2</mn> </msup> <mo>+</mo> <mn>10</mn> <mi>x</mi> <mo>+</mo> <mn>12</mn> <mo fence="true">} f(x) = \pi \left\{ x^4 + 7x^3 + 2x^2 + 10x + 12 \right\}

在这种构造中,尽管使用了 \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. f ( x ) = {</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 环境允许写分段函数:

u ( x ) = {</mo> <mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"> <mtr> <mtd> <mstyle scriptlevel="0" displaystyle="false"> <mrow> <mi>exp</mi> <mo>⁡</mo> <mi>x</mi> </mrow> </mstyle> </mtd> <mtd> <mstyle scriptlevel="0" displaystyle="false"> <mrow> <mtext>if </mtext> <mi>x</mi> <mo>≥</mo> <mn>0</mn> </mrow> </mstyle> </mtd> </mtr> <mtr> <mtd> <mstyle scriptlevel="0" displaystyle="false"> <mn>1</mn> </mstyle> </mtd> <mtd> <mstyle scriptlevel="0" displaystyle="false"> <mrow> <mtext>if </mtext> <mi>x</mi> <mo><</mo> <mn>0</mn> </mrow> </mstyle> </mtd> </mtr> </mtable> </mrow> </mrow> <annotation encoding="application/x-tex"> u(x) = \begin{cases} \exp{x} & \text{if } x \geq 0 \\ 1 & \text{if } x < 0 \end{cases} u ( x ) = {</mo> <mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"> <mtr> <mtd> <mstyle scriptlevel="0" displaystyle="false"> <mrow> <mi>exp</mi> <mo>⁡</mo> <mi>x</mi> </mrow> </mstyle> </mtd> <mtd> <mstyle scriptlevel="0" displaystyle="false"> <mrow> <mtext>if </mtext> <mi>x</mi> <mo>≥</mo> <mn>0</mn> </mrow> </mstyle> </mtd> </mtr> <mtr> <mtd> <mstyle scriptlevel="0" displaystyle="false"> <mn>1</mn> </mstyle> </mtd> <mtd> <mstyle scriptlevel="0" displaystyle="false"> <mrow> <mtext>if </mtext> <mi>x</mi> <mo><</mo> <mn>0</mn> </mrow> </mstyle> </mtd> </mtr> </mtable> </mrow> </mrow> <annotation encoding="application/x-tex"> u(x) = \begin{cases} \exp{x} & \text{if } x \geq 0 \\ 1 & \text{if } x < 0 \end{cases}

LaTeX 将负责定义和对齐列。

在 cases 环境中,文本样式的数学符号被使用,结果如:

a = {</mo> <mo>∫</mo> <mi>x</mi> <mtext> </mtext> <mi>d</mi> <mi>x</mi> <mspace linebreak="newline"></mspace> <msup> <mi>b</mi> <mn>2</mn> </msup> <mo fence="true">} a = \left\{ \int x \, dx \\ b^2 \right\}

dcases 环境

可以使用 mathtools 包中的 dcases 环境来替代显示样式:

a = {</mo> <mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"> <mtr> <mtd> <mstyle scriptlevel="0" displaystyle="true"> <mrow> <mo>∫</mo> <mi>x</mi> <mtext> </mtext> <mi mathvariant="normal">d</mi> <mi>x</mi> </mrow> </mstyle> </mtd> </mtr> <mtr> <mtd> <mstyle scriptlevel="0" displaystyle="true"> <msup> <mi>b</mi> <mn>2</mn> </msup> </mstyle> </mtd> </mtr> </mtable> </mrow> </mrow> <annotation encoding="application/x-tex">a = \begin{dcases} \int x\, \mathrm{d} x \\ b^2 \end{dcases} a = {</mo> <mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"> <mtr> <mtd> <mstyle scriptlevel="0" displaystyle="true"> <mrow> <mo>∫</mo> <mi>x</mi> <mtext> </mtext> <mi>d</mi> <mi>x</mi> </mrow> </mstyle> </mtd> </mtr> <mtr> <mtd> <mstyle scriptlevel="0" displaystyle="true"> <msup> <mi>b</mi> <mn>2</mn> </msup> </mstyle> </mtd> </mtr> </mtable> </mrow> </mrow> <annotation encoding="application/x-tex">a = \begin{dcases} \int x \, dx \\ b^2 \end{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}

B = × E , E = × B 4 π j B' = -\partial \times E, \quad E' = \partial \times B - 4\pi j

{\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}

σ 1 = x + y , σ 2 = x y \sigma_1 = x + y, \quad \sigma_2 = \frac{x}{y} σ 1 = x + y x , σ 2 = x y x \sigma_1' = \frac{\partial x + y}{\partial x}, \quad \sigma_2' = \frac{\partial \frac{x}{y}}{\partial x}

\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}
lima1a\lim_{a\to \infty} \frac{1}{a}

如果希望覆盖此行为,可以使用 \nolimits 运算符:

\begin{equation}
  \lim\nolimits_{a\to \infty} \tfrac{1}{a}
\end{equation}
lima1a\lim\nolimits_{a\to \infty} \frac{1}{a}

在行内文本中的 lim(例如在 $...$ 中)会将其限制条件放在符号的旁边,以避免额外的空白。若要覆盖此行为,使用 \limits 命令。

类似地,可以将下标放在通常位于旁边的符号下方:

\begin{equation}
  \int_a^b x^2  \mathrm{d} x
\end{equation}
abx2dx\int_a^b x^2 \, dx

若要将限制放置在下方:

\begin{equation}
  \int\limits_a^b x^2  \mathrm{d} x
\end{equation}
abx2dx\int\limits_a^b x^2 \, dx

更改求和类型符号的位置

要将求和类型符号的默认位置更改为侧边,可以在 amsmath 包中添加 nosumlimits 选项。要更改积分符号的位置,可以添加 intlimits 选项。对于命名运算符(如 detminlim 等),可以使用 nonamelimits 来改变默认行为。

生成单边限制

要生成单边限制,可以使用 \underset 命令,如下所示:

\begin{equation}
  \lim_{a \underset{>}{\to} 0} \frac{1}{a}
\end{equation}
lima>01a\lim_{a \underset{>}{\to} 0} \frac{1}{a}

下标和上标

你可以使用 \nolimits 在求和符号等符号中将符号放在下标或上标位置:

\begin{equation}
  \sum\nolimits' C_n
\end{equation}
Cn\sum\nolimits' C_n

通常的符号用法中无法混合它们:

\begin{equation}
  \sum_{n=1}\nolimits' C_n
\end{equation}
n=1Cn\sum_{n=1}\nolimits' C_n

添加一个质数和限制符号

要为符号同时添加一个质数和限制符号,可以使用 \sideset 命令:

\begin{equation}
  \sideset{}{'}\sum_{n=1}C_n
\end{equation}
\sidesetn=1Cn\sideset{}{'}\sum_{n=1}C_n

该命令非常灵活:例如,若要在符号的每个角落放置字母,可以使用此命令:

\begin{equation}
  \sideset{_a^b}{_c^d}\sum
\end{equation}
\sidesetabcd\sideset{_a^b}{_c^d}\sum

如果希望将字母放置在任意符号的角落,应该使用 \fourIdx 命令(需要 fouridx 包)。

但简单的分组也可以解决问题:

\begin{equation}
  {\sum\limits_{n=1}}'C_n
\end{equation}
n=1Cn{\sum\limits_{n=1}}'C_n

因为数学运算符可以有限制或没有限制。如果你想改变它的状态,只需将其分组。你可以将其作为另一个数学运算符,然后可以再次使用限制符。

多行下标

要生成多行下标,可以使用 \substack 命令:

\begin{equation}
  \prod_{\substack{
            1\le i \le n\\
            1\le j \le m}}
     M_{i,j}
\end{equation}
1in1jmMi,j\prod_{\substack{ 1\le i \le n\\ 1\le j \le m}} M_{i,j}

对齐数学显示中的文本

要在数学环境中添加小插入,可以使用 \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,以减少行间添加的垂直空白。

更改字体大小

有时你可能希望控制字体大小。例如,使用文本模式数学时,默认情况下一个简单的分数会像这样显示:

ab\frac{a}{b}

而你可能更希望它以较大的显示模式样式显示,但仍保持在行内,如下所示:

ab\frac{a}{b}

一种简单的方法是利用数学元素的预定义大小:

大小命令 描述
\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}
x=a0+1a1+1a2+1a3+a4x = a_0 + \frac{1}{a_1 + \frac{1}{a_2 + \frac{1}{a_3 + a_4}}}

如你所见,随着分数的继续,它们变得越来越小(尽管它们不会比此示例中的还要小,因为它们已经达到了 \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}
x=a0+1a1+1a2+1a3+a4x = a_0 + \frac{1}{\displaystyle a_1 + \frac{1}{\displaystyle a_2 + \frac{1}{\displaystyle a_3 + a_4}}}

另一种方法是使用 \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


Last modified: Tuesday, 22 April 2025, 10:06 AM