LaTeX 数学笔记
整理一下LaTeX关于数学公式/定理与证明以及相关的内容。
AMS宏包
AMS提供了一系列最常用的LaTeX数学宏包:
amsmath
宏包:- 提供了一套增强的数学排版命令和环境,使得数学公式的编辑和排版更加灵活和方便。
- 引入了一些新的数学环境,例如
align
和gather
,以便更好地控制多行公式的排版。 - 提供了诸如
\text
,\DeclareMathOperator
等命令,用于在数学模式中插入文本或定义新的运算符。
amssymb
宏包:扩展了amsmath
,提供了额外的数学符号,如各种箭头、关系符号、集合符号等。amsfonts
宏包:提供了一些额外的字体,例如\mathbb
命令用于黑板粗体字母。amsthm
宏包:提供了theorem
,lemma
,proof
等定理或证明环境,方便用户在文档中定义和使用定理。
下面的数学公式绝大部分都需要这些宏包,默认已经被导入
1
\usepackage{amsmath,amssymb,amsfonts,amsthm}
数学公式排版
行内公式直接使用$...$
包裹即可,也可以使用\(...\)
包裹,不做讨论,下面主要关注的是行间公式。
\(\Tex{}\)
默认的行间公式环境为$$...$$
,这也是Markdown支持的行间公式,但是在LaTex中并不推荐使用它,虽然在大多数情况下是没有问题的,但是在某些情况下和\[\]
以及其它行间公式环境的表现并不一样。
这里只关注了编号和多行公式的问题,略去了很多数学符号的处理。
基本使用
基本的行间公式环境为equation
,例如 1
2
3
4
5\begin{equation}
a^2 + b^2 = c^2 \label{pythagorean}
\end{equation}
Equation \eqref{pythagorean} is called `Gougu theorem' in Chinese.
公式自动带有编号并在右侧呈现,编号可能形如:1, 2, 3, 也可能形如1.1,
1.2等基于章节的编号,
默认行为取决于当前文档是atricle这类小型文本或book这类大型文本,当然也可以使用命令手动更改
1
\numberwithin{equation}{section}
可以使用\label{}
结合\ref{}
或\eqref{}
来形成交叉引用,后者是宏包提供的,区别仅仅是自动给编号加了括号。
可以在行尾使用\notag
来抑制当前行公式生成编号。可以在行尾使用\tag{xxx}
来手动修改编号,例如一个具有特殊意义的文本标记
1
2
3
4
5
6
7
8It's wrong to say
\begin{equation}
1 + 1 = 3 \notag
\end{equation}
or
\begin{equation}
1 + 1 = 4 \tag{dumb}
\end{equation}
有时需要使用完全不带编号的公式,可以使用equation*
环境,更常见的选择是\[\]
,它也提供了不带编号的行间公式环境,它实际上是displaymath
环境的等价形式。
1 | \begin{equation*} |
多行公式
一个常见的使用情景为罗列一组公式,按照中间的等号对齐,常用的环境为align
,基于&
定位,通常将&
放在等号左侧,在多行公式中使用\\
换行
1
2
3
4\begin{align}
a & = b + c \\
& = d + e
\end{align}
默认情形下align
环境的每一行都会产生一个编号,可以使用\notag
去掉某行的编号,例如出现长公式换行。
有时也可能将&
放在等号右侧,因为右侧有长公式需要换行,不能让加号和等号对齐,例如
1
2
3
4
5
6\begin{align}
a ={} & b + c \\
={} & d + e + f + g + h + i + j + k + l \notag \\
& + m + n + o \\
={} & p + q + r + s
\end{align}
这里的={} &
是为了产生更合适的间距。
对于多组公式的对齐,例如两行三列的公式可以如下表示,其中公式之间和等号旁都要加上&
1
2
3
4\begin{align}
a &=1 & b &=2 & c &=3 \\
d &=-1 & e &=-2 & f &=-5
\end{align}
除了默认的多行公式环境align
,还有几个常见的需求以及对应的变体,例如完全不使用编号的环境align*
,还有一个情景是多行公式被打包为一个整体进行编号,此时需要使用aligned
环境,例如
1
2
3
4
5
6
7
8\begin{equation}
\begin{aligned}
a &= b + c \\
d &= e + f + g \\
h + i &= j + k \\
l + m &= n
\end{aligned}
\end{equation}
公式细节
- \(\ell\)(
\ell
)是一个手写体的小写字母,通常用于数学公式中替代l(L小写)来使用,防止与1(数字1)和I(大写i)的混淆。 - 可以使用 \(A^\top\)(
A^\top
)而非 \(A^T\)(A^T
)来表示矩阵转置记号。 - 在本身就是斜体的定理环境的公式环境里,可能
\text{xxx}
无法起到正体的效果,可以改成使用\mathrm{xxx}
。 - 使用
\dots
而非连续的...
,也可以具体指定\ldots
,\cdots
,\cdots
会自动调整显示效果。 - 使用
\mid
而非直接的|
,它提供更合适的间距,例如在集合的定义中使用。 - 对于行内公式,尽量不要包括标点符号,把标点符号放在行内公式的外面;对于行间公式,则需要包括标点符号。
- 使用
\times
和\cdot
表示乘法,不要直接使用x
或*
。
定理与证明
amsthm宏包提供了定理类和证明类环境,但是并不是开箱即用的,这里记录一下。
定理类环境
基于amsthm包可以创造定理类环境,语法包括如下几类 1
2
3
4
5\newtheorem{name}{text} % 独自使用计数器
\newtheorem{name}{text}[section-level] % 基于section层级设置计数器
\newtheorem{name}[counter]{text} % 共享其它环境的计数器
\newtheorem*{name}{text} % 不使用计数器
其中
- name:定理类环境的标识符(名称)
- text:显示出的环境名称(引导词)
- 下面两个可选项决定了编号,但是相互冲突,只能使用其一:
- counter:共享计数器,通常每一个定理类环境都有自己的计数器,但是可以引入其它的定理类环境,表示两者共享计数器
- section-level:编号计数器依赖于某个章节层次,也可以换成基于定理环境等。
下面的常用环境都可以基于定理环境创建:(按照字体风格进行了分类)
- plain风格
- 定理 theorem
- 推论 corollary
- 引理 lemma
- 命题 proposition
- definition风格
- 定义 definition
- 例子 example
- 问题 problem
- remark风格
- 注记 remark(remark*)
- 笔记 note(note*)
使用时例如 1
2
3\begin{theorem}
...
\end{theorem}
或者可以加上额外名称,会在引导词后加上括号显示 1
2
3\begin{theorem}[xxx]
...
\end{theorem}
关于下面三个写法的计数区别 1
2
3\newtheorem{theorem}{Theorem}[section]
\newtheorem{corollary}{Corollary}[theorem]
\newtheorem{lemma}[theorem]{Lemma}
首先对于theorem,根据当前section创建子编号。 对于corollary,根据最近一次的theorem创建子编号,例如Theorem 1.1之后的Corollary采用编号1.1.1。 对于lemma,则与theorem共享计数器,例如theorem 1.1之后的Lemma则采用编号1.2。
可以使用 \theoremstyle{style}
命令修改定理环境的样式,内置样式有三种:
- plain(默认样式):引导词是正体,内容是斜体,通常用于定理/推论/引理/命题等
- definition:引导词和内容都是正体,通常用于定义/条件/示例/问题等
- remark:引导词是斜体,内容是正体,通常用于remark/note/断言/结论等
完整的定义语法如下 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16\theoremstyle{plain}
\newtheorem{theorem}{Theorem}[section] % 定理,基于section计数器
\newtheorem{corollary}{Corollary}[theorem] % 推论,继承定理的计数器
\newtheorem{lemma}[theorem]{Lemma} % 引理,共享定理的计数器
\newtheorem{proposition}[theorem]{Proposition} % 命题,共享定理的计数器
\theoremstyle{definition}
\newtheorem{definition}{Definition}[section] % 定义,基于section计数器
\newtheorem{example}{Example}[section] % 示例,基于section计数器
\newtheorem{problem}{Problem}[section] % 问题,基于section计数器
\theoremstyle{remark}
\newtheorem{remark}{Remark} % remark,独立计数器
\newtheorem{note}{Note} % note,独立计数器
\newtheorem*{remark*}{Remark} % remark*,无编号
\newtheorem*{note*}{Note} % note*,无编号
证明类环境
amsthm也提供了用于写证明/解答的proof环境,不含有编号,默认样式包括:引导词Proof为斜体,内容是正体,结尾会自动添加证毕的方框符号。
可以直接使用,并不需要手动定义 1
2
3\begin{proof}
...
\end{proof}
注意proofname默认是proof,但是会被ctex修改为中文的证明,这里改回来
1
2
3
4% proof是默认存在的证明环境
% proofname默认是斜体英文proof,但是会被ctex修改为中文证明,这里改回来
\renewcommand{\proofname}{\bf Proof}
\newenvironment{solution}{\begin{proof}[\bf Solution]}{\end{proof}} % 解答
注:这里并没有对证明的引导词采用缩进,可以加入
\indent
实现。要求中文排版时,上述所有的引导词可以直接替换为相应的中文。
数学字体
下面几个命令是LaTeX默认支持的数学环境中的字体:
\mathnormal{}
:数学环境的默认字体\mathrm{}
:罗马体\mathit{}
:意大利体(italic),通常是斜体\mathbf{}
:粗体(bold),通常是直立的粗体\mathsf{}
:无衬线体\mathtt{}
:打字机体\mathcal{}
:手写体(花体),注意默认情形仅支持大写英文字母,某些大写希腊字母不支持\mathbb{}
:(需要amssymb宏包或amsfonts)黑板粗体(blackboard bold),注意仅支持大写字母
\mathnormal{}
是数学环境的默认字体,与正文中相比,字母之间的间距更大一些,其它几个字体的间距则于正文基本一致(但没有连字),例如
$xyz$
和 $\mathit{xyz}$
的间距不同。
默认的\mathbf{}
命令提供的是加粗直立的大写字母,还可以使用bm宏包提供的\bm{}
命令来获得加粗的斜体字母。
英文字母
英文大小写字母的常见字体效果如图
\mathcal{}
是 LaTeX 直接提供的花体命令,而 mathrsfs
宏包提供了一套略微不同的花体,使用\mathscr{}
命令即可,它提供的花体更花哨复杂一些。
除此之外,还有一种可读性最差的哥特体(mathfrak),并不需要额外的宏包,直接使用\mathfrak{}
命令即可
希腊字母
LaTeX对希腊字母的默认支持特别奇怪,有的字母有大小写,有的字母只有小写,有的甚至完全不支持(omicron), 有的还有var开头的变体,如下表。希腊字母通常不会使用花体之类的变形。如果使用额外的字体宏包,则可能支持的范围更大一些。
omicron在LaTeX中没有对应的符号
\omicron
,可能是因为它的大小写和英文字母Oo完全一样。
自定义命令
在这里补充几个便于快速排版数学公式的命令。
使用\(\text{Re}\)和\(\text{Im}\)替换默认的实部虚部符号\(\Re\)和\(\Im\) 1
2
3
4
5% 定义自定义实部和虚部命令,并替换默认的字体
\DeclareMathOperator{\myRe}{\text{Re}}
\DeclareMathOperator{\myIm}{\text{Im}}
\let\Re\myRe
\let\Im\myIm
快速定义和使用矩阵集合 1
2\NewDocumentCommand{\mat}{>{\SplitArgument{1}{,}}m}{\mataux#1}
\NewDocumentCommand{\mataux}{mm}{\mathbb{R}^{#1 \times #2}}