LaTeX/高级数学
本页面概述了一些使用 LaTeX 进行数学标记的更高级的用法。特别是,它大量使用了由 美国数学学会 提供的 AMS-LaTeX 包。
equation
环境会自动为您的方程编号
\begin{equation}
f(x)=(x+a)(x+b)
\end{equation}
|
|
您还可以使用 \label
和 \ref
(或 \eqref
来自 amsmath 包)命令分别对方程进行标记和引用。对于方程编号 1,\ref
的结果为 ,而 \eqref
的结果为
\begin{equation} \label{eq:someequation}
6^2 - 5 = 36-5 = 31
\end{equation}
this references equation \ref{eq:someequation}.
|
|
\begin{equation} \label{eq:erl}
a = bq + r
\end{equation}
where \eqref{eq:erl} is true if $a$ and $b$ are integers with $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}
|
|
如果您遵循的样式要求在序数后面加点(至少在波兰排版中是必需的),那么在序言中使用\numberwithin{equation}{subsection}
命令,会导致上面的示例中的方程式编号呈现为如下形式:(1.1.1)。
要删除重复的点,请在\numberwithin{equation}{section}
之后立即添加以下命令
\renewcommand{\theequation}{\thesection\arabic{equation}}
|
对于使用\numberwithin{equation}{subsection}
的编号方案,请使用
\renewcommand{\theequation}{\thesubsection\arabic{equation}}
|
在文档的序言中。
注意:虽然看起来\renewcommand
可以独立工作,但它不会在每个新节开始时重置方程式编号。它必须与每个新节开始后的手动方程式编号重置一起使用,或者与更简洁的\numberwithin
一起使用。
下属方程式编号
[edit | edit source]要在一个编号的方程式环境中为下属方程式编号,请将包含它们的文档部分放置在一个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}
|
|
引用下属方程式可以使用两种方法之一:在\{subequations}
命令之后添加标签,即\label{eq:Maxwell}
,这将引用主方程式(上面的 1.1),或者在每行结尾添加标签,在\\
命令之前,这将引用子方程式(上面的 1.1a 或 1.1b)。如所示,如果需要两种类型的引用,可以添加两个标签。/Override_subsystem=/index
垂直对齐显示的数学公式
[edit | edit source]在显示环境 (displaymath 和 equation) 中经常遇到的一个问题是,无法跨多行。虽然可以单独定义行,但这些行不会对齐。
上下
[edit | edit source]\overset
和 \underset
命令[1] 在表达式上方和下方排版符号。如果没有 AMS-TeX,\overset
的相同结果可以用 \stackrel
获得。这对于创建新的二元关系特别有用
\[
A \overset{!}{=} B; A \stackrel{!}{=} B
\]
|
|
或者为了展示洛必达法则 的用法
\[
\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\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 = \overbrace{
\underbrace{x}_\text{real} + i
\underbrace{y}_\text{imaginary}
}^\text{complex number}
\]
|
|
有时注释比被注释的公式更长,这会导致间距问题。可以使用 \mathclap
命令[2] 来消除这些间距问题
\[
y = a + f(\underbrace{b x}_{
\ge 0 \text{ by assumption}})
= a + f(\underbrace{b x}_{
\mathclap{\ge 0 \text{ by assumption}}})
\]
|
或者,要使用方括号而不是花括号,请使用 \underbracket
和 \overbracket
命令[2]
\[
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}
|
The \xleftarrow
和 \xrightarrow
命令[1] 生成延伸到文本长度的箭头。 再次,语法不同:可选参数(使用 [
和 ]
)指定下标,强制参数(使用 {
和 }
)指定上标(可以通过插入空格将其留空)。
\[
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*
[edit | edit source]The align 和 align* 环境,通过 amsmath 包可用,用于排列多行方程式。 与矩阵和表格一样,\\
指定换行符,&
用于指示应对齐行的点。
The 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}
|
|
请注意,我们在第二行中添加了一些缩进。 此外,我们需要在 + 符号之前插入双花括号 ({}
),否则 latex 不会在 + 符号之后创建正确的间距。 这样做的原因是,如果没有花括号,latex 会将 + 符号解释为一元运算符,而不是它真正的二元运算符。
可以使用单个行上附加的 &
来实现更复杂的对齐,指定多个“方程式列”,每个方程式列都对齐。 以下示例说明了 align* 的对齐规则
\begin{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
\end{align*}
|
|
跨越多行的括号
[edit | edit source]如果您希望括号跨越多行,请执行以下操作
\begin{align}
f(x) &= \pi \left\{ x^4 + 7x^3 + 2x^2 \right.\nonumber\\
&\qquad \left. {} + 10x + 12 \right\}
\end{align}
|
|
在这个构造中,尽管使用了 \left\{
和 \right\}
,但左右括号的大小并不自动相等。这是因为每行都被排版为一个完全独立的方程——请注意使用 \right.
和 \left.
,因此一行中没有不匹配的 \left
和 \right
命令(如果公式只有一行,这些命令就不需要)。你可以使用 \big
、\Big
、\bigg
和 \Bigg
命令手动控制括号的大小。
或者,可以使用 \vphantom
命令复制较高的方程的高度到另一个方程。
\begin{align}
A &= \left(\int_t XXX \right.\nonumber\\
&\qquad \left.\vphantom{\int_t} YYY \dots \right)
\end{align}
|
|
使用对齐括号来表示分段函数
[edit | edit source]你也可以使用 \left\{
和 \right.
来排版 分段函数
\[f(x) = \left\{
\begin{array}{lr}
x^2 & : x < 0\\
x^3 & : x \ge 0
\end{array}
\right.
\]
|
|
cases 环境
[edit | edit source]cases 环境[1] 允许编写分段函数。
\[
u(x) =
\begin{cases}
\exp{x} & \text{if } x \geq 0 \\
1 & \text{if } x < 0
\end{cases}
\]
|
|
LaTeX 将负责定义和对齐列。
在 cases 环境中,使用文本样式数学,例如
可以使用显示样式,通过使用 dcases 环境[2],它来自 mathtools 包。
\[
a =
\begin{dcases}
\int x\, \mathrm{d} x\\
b^2
\end{dcases}
\]
|
|
通常第二列主要由普通文本组成。为了将其设置为文档的普通罗马字体,可以使用 dcases* 环境:[2]
\[
f(x) = \begin{dcases*}
x & when $x$ is even\\
-x & when $x$ is odd
\end{dcases*}
\]
|
|
其他环境
[edit | edit source]虽然 align 和 align* 是最实用的,但也有一些其他环境可能也很有用。
环境名称 | 描述 | 备注 |
---|---|---|
eqnarray 和 eqnarray* | 类似于 align 和 align* | 不推荐,因为间距不一致 |
multline 和 multline*[1] | 第一行左对齐,最后一行右对齐 | 方程编号与第一行垂直对齐,而不是像其他环境那样居中 |
gather 和 gather*[1] | 连续方程,没有对齐 | |
flalign 和 flalign*[1] | 类似于 align,但将第一个方程列左对齐,并将最后一个列右对齐 | |
alignat 和 alignat*[1] | 接受一个参数,指定列数。允许控制方程之间的水平间距 | 此环境接受一个参数,即“方程列”的数量:计算任何一行中 & 的最大数量,加 1 并除以 2。 [1] |
还有一些环境本身不构成数学环境,可以作为构建更复杂结构的构建块
数学环境名称 | 描述 |
---|---|
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}
|
|
\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\limits_{-\pi}^{\pi}f(x)\,\mathrm{d}x\\[6pt]
\begin{split}
a_n=\frac{1}{\pi}\int\limits_{-\pi}^{\pi}f(x)\cos nx\,\mathrm{d}x=\\
=\frac{1}{\pi}\int\limits_{-\pi}^{\pi}x^2\cos nx\,\mathrm{d}x
\end{split}\\[6pt]
\begin{split}
b_n=\frac{1}{\pi}\int\limits_{-\pi}^{\pi}f(x)\sin nx\,\mathrm{d}x=\\
=\frac{1}{\pi}\int\limits_{-\pi}^{\pi}x^2\sin nx\,\mathrm{d}x
\end{split}\\[6pt]
\end{gather*}
|
缩进方程
[edit | edit source]要缩进方程,可以在文档类中设置 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}
|
数学环境中的分页符
[edit | edit source]要建议 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*}
|
显示数学(各种形式)之前的分页符由 \predisplaypenalty
控制。它的默认值 10000 表示永远不要在显示之前立即换页。Knuth(TeXbook 第 19 章)解释了这一点,这是一项印刷传统,即不要在页面开头放置显示方程式。它可以通过以下方法放松
\predisplaypenalty=0
|
有时,一个方程看起来最好一起放在一起,用更高的惩罚领先于文本,例如,一个关于单行方程的单行段落,尤其是在部分的末尾。
对于单个方程或对齐构建块,标签在框外,使用 \boxed{}
\begin{equation}
\boxed{x^2+y^2 = z^2}
\end{equation}
|
如果你想把整行或几个方程框起来,使用 minipage 放在 \fbox{}
内
\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}
|
|
要将求和类型符号的默认放置位置更改为每个情况下的侧面,请将 nosumlimits 选项添加到 amsmath 包中。要更改积分符号的放置位置,请将 intlimits 添加到选项中。 nonamelimits 可以用来改变像这样的命名运算符的默认值det, min, lim等。
要生成单边极限,请使用 \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}
|
|
因为数学运算符可以用或不用极限。如果你想改变它的状态,只需将其分组。如果你想的话,你可以把它变成另一个数学运算符,然后你就可以有极限,然后再次有极限。
多行下标
[edit | edit source]要生成多行下标,请使用 \substack
命令
\begin{equation}
\prod_{\substack{
1\le i \le n\\
1\le j \le m}}
M_{i,j}
\end{equation}
|
|
对齐数学显示中的文本
[edit | edit source]要在数学环境中添加小的插入语,请使用 \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
命令来减少行之间添加的垂直空白量。
更改字体大小
[edit | edit source]可能会有时你希望能够控制字体大小。例如,使用文本模式数学,默认情况下,一个简单的分数将看起来像这样:,而你可能更希望它以更大的显示方式显示,就像在显示模式下一样,但仍然保持内联,像这样:.
一个简单的方法是利用数学元素的预定义大小
大小命令 | 描述 |
---|---|
\displaystyle
|
显示模式下方程的大小 |
\textstyle
|
文本模式下方程的大小 |
\scriptstyle
|
第一个子/上标的大小 |
\scriptscriptstyle
|
后续子/上标的大小 |
一个经典的例子是排版连分数(尽管最好使用 \cfrac
命令[1],如 Mathematics 章中所述,而不是下面提供的方法)。以下代码提供了一个示例。
\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
[edit | edit source]把
\everymath{\displaystyle}
|
放在
\begin{document}
|
之前,将强制所有数学公式使用
\displaystyle
|
.
调整显示数学公式周围的垂直空白
[edit | edit source]有四个参数控制显示数学公式周围的垂直空白
\abovedisplayskip=12pt
\belowdisplayskip=12pt
\abovedisplayshortskip=0pt
\belowdisplayshortskip=7pt
|
如果前一行水平地结束在公式之前,则使用短跳过。这些参数必须在
\begin{document}
|
.
备注
[edit | edit source]