summaryrefslogtreecommitdiff
path: root/info/lshort/chinese/src/chap/chap.04.math.tex
diff options
context:
space:
mode:
Diffstat (limited to 'info/lshort/chinese/src/chap/chap.04.math.tex')
-rw-r--r--info/lshort/chinese/src/chap/chap.04.math.tex901
1 files changed, 901 insertions, 0 deletions
diff --git a/info/lshort/chinese/src/chap/chap.04.math.tex b/info/lshort/chinese/src/chap/chap.04.math.tex
new file mode 100644
index 0000000000..75212c440a
--- /dev/null
+++ b/info/lshort/chinese/src/chap/chap.04.math.tex
@@ -0,0 +1,901 @@
+\chapter{排版数学公式}\label{chap:math}
+\addtocontents{los}{\protect\addvspace{10pt}}
+
+\begin{intro}
+准备好了!本章将见识到 \LaTeX{} 闻名的强项——排版数学公式。当然你得注意了,本章的内容只是一点皮毛,
+虽然对大多数人来说已经够用了,但是如果不能解决你的问题的话也不要大惊小怪,求助于搜索引擎或者有经验的人不失为一个好办法。
+\end{intro}
+\DeclareRobustCommand*\amscmd[1]{\textcolor{blue}{\cmd{#1}}}
+\DeclareRobustCommand*\amsenv[1]{\textcolor{blue}{\env{#1}}}
+
+\section{\hologo{AmS} 宏集}\label{sec:ams-bundle}
+
+\pkgindex{amsmath,amsfonts,amssymb,amsthm}
+在介绍数学公式排版之前,简单介绍一下 \hologo{AmS} 宏集。\hologo{AmS} 宏集合是美国数学学会(American Mathematical Society)提供的对
+\LaTeX{} 原生的数学公式排版的扩展,其核心是 \pkg{amsmath} 宏包,对多行公式的排版提供了有力的支持。
+此外,\pkg{amsfonts} 宏包以及基于它的 \pkg{amssymb} 宏包提供了丰富的数学符号;\pkg{amsthm} 宏包扩展了 \LaTeX{} 定理证明格式。
+
+本章介绍的许多命令和环境依赖于 \pkg{amsmath} 宏包,这些命令和环境将以\textcolor{blue}{蓝色}示意。以下示例都假定了导言区中写有
+\begin{verbatim}
+\usepackage{amsmath}
+\end{verbatim}
+
+\section{公式排版基础}\label{sec:math-basics}
+
+\subsection{行内和行间公式}\label{subsec:math-inline-display}
+
+数学公式有两种排版方式:其一是与文字混排,称为\textbf{行内公式};其二是单独列为一行排版,称为\textbf{行间公式}。
+
+\pinyinindex{hangneigongshi}{行内公式}
+\index{^^d@\texttt\$ (\textit{数学模式})}
+行内公式由一对 \texttt\$ 符号包裹:
+\begin{example}
+The Pythagorean theorem is
+$a^2 + b^2 = c^2$.
+\end{example}
+
+\envindex{equation}
+\cmdindex{label,ref,nonumber}
+\cmdindex[amsmath]{eqref,tag,notag}
+单独成行的\textbf{行间公式}在 \LaTeX{} 里由 \env{equation} 环境包裹。
+\env{equation} 环境为公式自动生成一个编号,这个编号可以用 \cmd{label} 和 \cmd{ref} 生成交叉引用,
+\pkg{amsmath} 的 \amscmd{eqref} 命令甚至为引用自动加上圆括号;还可以用 \amscmd{tag} 命令手动修改公式的编号,
+或者用 \amscmd{notag} 命令取消为公式编号(与之基本等效的命令是 \cmd{nonumber})。
+
+\begin{example}
+The Pythagorean theorem is:
+\begin{equation}
+a^2 + b^2 = c^2 \label{pythagorean}
+\end{equation}
+Equation \eqref{pythagorean} is
+called `Gougu theorem' in Chinese.
+\end{example}
+
+\begin{example}
+It's wrong to say
+\begin{equation}
+1 + 1 = 3 \tag{dumb}
+\end{equation}
+or
+\begin{equation}
+1 + 1 = 4 \notag
+\end{equation}
+\end{example}
+
+\cmdindex{[,]}
+\envindex{displaymath}
+\envindex[amsmath]{equation*}
+如果需要直接使用不带编号的行间公式,则将公式用命令 \cmd{[} 和 \cmd{]} 包裹%
+\footnote{\TeX{} 原生排版行间公式的方法是用一对 \texttt{\$\$} 符号包裹,不过无法通过指定 \texttt{fleqn} 选项控制左对齐,
+与上下文之间的间距也不好调整,故不太推荐使用。},
+与之等效的是 \env{displaymath} 环境。有的人更喜欢 \amsenv{equation*} 环境,体现了带星号和不带星号的环境之间的区别。
+
+\begin{example}
+\begin{equation*}
+a^2 + b^2 = c^2
+\end{equation*}
+For short:
+\[ a^2 + b^2 = c^2 \]
+Or if you like the long one:
+\begin{displaymath}
+a^2 + b^2 = c^2
+\end{displaymath}
+\end{example}
+
+我们通过一个例子展示行内公式和行间公式的对比。为了与文字相适应,行内公式在排版大的公式元素(分式、巨算符等)时显得很“局促”:
+
+\begin{example}
+In text:
+$\lim_{n \to \infty}
+\sum_{k=1}^n \frac{1}{k^2}
+= \frac{\pi^2}{6}$.
+
+In display:
+\[
+\lim_{n \to \infty}
+\sum_{k=1}^n \frac{1}{k^2}
+= \frac{\pi^2}{6}
+\]
+\end{example}
+
+行间公式的对齐、编号位置等性质由文档类选项控制,文档类的 \texttt{fleqn} 选项令行间公式左对齐;
+\texttt{leqno} 选项令编号放在公式左边。
+
+\subsection{数学模式}\label{subsec:math-mode}
+
+\pinyinindex{shuxuemoshi}{数学模式}
+\cmdindex[amsmath]{text}
+当用户使用 \texttt\$ 开启行内公式输入,或是使用 \cmd{[} 命令、\env{equation} 环境时,\LaTeX{} 就进入了\textbf{数学模式}。
+数学模式相比于文本模式有以下特点:
+\begin{enumerate}
+ \item 数学模式中输入的空格被忽略。数学符号的间距默认由符号的性质(关系符号、运算符等)决定。
+ 需要人为引入间距时,使用 \cmd{quad} 和 \cmd{qquad} 等命令。详见 \ref{sec:math-space} 节。
+ \item \textbf{不允许有空行(分段)}。行间公式中也无法用 \crcmd{} 命令手动换行。排版多行公式需要用到
+ \ref{sec:multi-eqns} 节介绍的各种环境。
+ \item 所有的字母被当作数学公式中的变量处理,字母间距与文本模式不一致,也无法生成单词之间的空格。
+ 如果想在数学公式中输入正体的文本,简单情况下可用 \ref{subsec:math-alpha} 小节中提供的 \cmd{mathrm} 命令。
+ 或者用 \pkg{amsmath} 提供的 \amscmd{text} 命令%
+ \footnote{\amscmd{text} 命令仅适合在公式中穿插少量文字。如果你的情况正好相反,需要在许多文字中穿插使用公式,
+ 则应该像正常的行内公式那样用,而不是滥用 \amscmd{text} 命令。}。
+\end{enumerate}
+\begin{example}
+$x^{2} \geq 0 \qquad
+\text{for \textbf{all} }
+x\in\mathbb{R}$
+\end{example}
+
+\section{数学符号}\label{sec:math-symbols}
+
+\def\msym#1{$\csname #1\endcsname$ (\cmd{#1})}
+
+\pkgindex{amssymb}
+本节我们将接触到形形色色的数学符号,它们是 \LaTeX{} 卓越的数学公式排版能力的基础。\LaTeX{} 默认提供了常用的数学符号,
+\pkg{amssymb} 宏包提供了一些次常用的符号。大多数常用的数学符号都能在本章末尾的 \ref{sec:math-tables} 节列出的各个表格里查到。
+更多符号可查阅参考文献\cite{symbols}。
+
+\subsection{一般符号}\label{subsec:math-general}
+
+\pinyinindex{xilazimu}{希腊字母 (数学符号)}
+\msymindex{infty}
+希腊字母符号的名称就是其英文名称,如 \msym{alpha}、\msym{beta} 等等。
+大写的希腊字母为首字母大写的命令,如 \msym{Gamma}、\msym{Delta} 等等。
+无穷大符号为 \msym{infty}。更多符号命令可参考表 \ref{tbl:math-greek} 和 \ref{tbl:math-misc} 等。
+
+\msymindex{dots,ldots,cdots}
+省略号有 \msym{dots} 和 \msym{cdots} 两种形式。它们有各自合适的用途:
+\begin{example}
+$a_1, a_2, \dots, a_n$ \\
+$a_1 + a_2 + \cdots + a_n$
+\end{example}
+
+\cmd{ldots} 和 \cmd{dots} 是完全等效的,它们既能用在公式中,也用来在文本里作为省略号(详见 \ref{subsec:punct} 小节)。
+除此之外,在矩阵中可能会用到竖排的 \msym{vdots} 和斜排的 \msym{ddots}。
+
+\subsection{指数、上下标和导数}\label{subsec:math-scripts}
+
+\index{^@\texttt\textasciicircum\ (\textit{数学上标})}
+\index{_@\texttt\textunderscore\ (\textit{数学下标})}
+在 \LaTeX{} 中用 \texttt\textasciicircum 和 \texttt\textunderscore 标明上下标。
+注意上下标的内容(子公式)一般需要\textbf{用花括号包裹},否则上下标只对后面的一个符号起作用。
+\begin{example}
+$p^3_{ij} \qquad
+m_\mathrm{Knuth}\qquad
+\sum_{k=1}^3 k $\\[5pt]
+$a^x+y \neq a^{x+y}\qquad
+e^{x^2} \neq {e^x}^2$
+\end{example}
+
+\pinyinindex{daoshu}{导数符号\texttt' ($a'$)}
+导数符号\texttt'(${}'$)是一类特殊的上标,可以适当连用表示多阶导数,也可以在其后连用上标:
+\begin{example}
+$f(x) = x^2 \quad f'(x)
+= 2x \quad f''^{2}(x) = 4$
+\end{example}
+
+\subsection{分式和根式}\label{subsec:frac-sqrt}
+
+\mathindex{frac}
+\cmdindex[amsmath]{dfrac,tfrac}
+分式使用 \cmd{frac}\marg*{分子}\marg*{分母} 来书写。分式的大小在行间公式中是正常大小,而在行内被极度压缩。
+\pkg{amsmath} 提供了方便的命令 \amscmd{dfrac} 和 \amscmd{tfrac},令用户能够在行内使用正常大小的分式,或是反过来。
+\begin{example}
+In display style:
+\[
+3/8 \qquad \frac{3}{8}
+\qquad \tfrac{3}{8}
+\]
+In text style:
+$1\frac{1}{2}$~hours \qquad
+$1\dfrac{1}{2}$~hours
+\end{example}
+
+\mathindex{sqrt}
+一般的根式使用 \cmd{sqrt}\marg*{...};表示 $n$ 次方根时写成 \cmd{sqrt}\oarg*{\textit{n}}\marg*{...}。
+\begin{example}
+$\sqrt{x} \Leftrightarrow x^{1/2}
+\quad \sqrt[3]{2}
+\quad \sqrt{x^{2} + \sqrt{y}}$
+\end{example}
+
+\cmdindex[amsmath]{binom}
+特殊的分式形式,如二项式结构,由 \pkg{amsmath} 宏包的 \amscmd{binom} 命令生成:
+\begin{example}
+Pascal's rule is
+\[
+\binom{n}{k} =\binom{n-1}{k}
++ \binom{n-1}{k-1}
+\]
+\end{example}
+
+\subsection{关系符}\label{subsec:math-rel}
+
+\msymindex{ne,ge,le,approx,equiv,propto,sim}
+\LaTeX{} 常见的关系符号除了可以直接输入的 $=$,$>$,$<$,其它符号用命令输入,常用的有不等号 \msym{ne}、
+大于等于号 \msym{ge} 和小于等于号 \msym{le}%
+\footnote{倾斜的关系符号 \msym{leqslant} 和 \msym{geqslant} 由 \pkg{amssymb} 提供,见表 \ref{tbl:ams-rel}。}、
+约等号 \msym{approx}、等价 \msym{equiv}、正比 \msym{propto}、相似 \msym{sim} 等等。
+更多符号命令可参考表 \ref{tbl:math-rel} 以及表 \ref{tbl:ams-rel}。
+
+\mathindex{stackrel}
+\LaTeX{} 还提供了自定义二元关系符的命令 \cmd{stackrel},用于将一个符号叠加在原有的二元关系符之上:
+\begin{example}
+\[
+f_n(x) \stackrel{*}{\approx} 1
+\]
+\end{example}
+
+\subsection{算符}\label{subsec:math-op}
+
+\msymindex{times,div,cdot,pm,mp}
+\LaTeX{} 中的算符大多数是二元算符,除了直接用键盘可以输入的 $+$、$-$、$*$、$/$,其它符号用命令输入,
+常用的有乘号 \msym{times}、 除号 \msym{div}、点乘 \msym{cdot}、加减号 \msym{pm} / \msym{mp} 等等。
+更多符号命令可参考表 \ref{tbl:math-op} 以及表 \ref{tbl:ams-op}。
+
+\msymindex{nabla,partial}
+\msym{nabla} 和 \msym{partial} 也是常用的算符,虽然它们不属于二元算符。
+
+\pinyinindex{shuxuehanshu}{数学函数}
+\LaTeX{} 将数学函数的名称作为一个算符排版,字体为直立字体。其中有一部分符号在上下位置可以书写一些内容作为条件,
+类似于后文所叙述的巨算符。
+
+\begin{table}[htp]
+\centering
+\caption{\LaTeX{} 作为算符的函数名称一览}\label{tbl:math-functions}
+\begin{tabular}{*{5}{p{5em}}}
+\hline
+\multicolumn{5}{c}{\textbf{不带上下限的算符}} \\
+\hline
+\cmd{sin} & \cmd{arcsin} & \cmd{sinh} & \cmd{exp} & \cmd{dim} \\
+\cmd{cos} & \cmd{arccos} & \cmd{cosh} & \cmd{log} & \cmd{ker} \\
+\cmd{tan} & \cmd{arctan} & \cmd{tanh} & \cmd{lg} & \cmd{hom} \\
+\cmd{cot} & \cmd{arg} & \cmd{coth} & \cmd{ln} & \cmd{deg} \\
+\cmd{sec} & \cmd{csc} & \\
+\hline
+\multicolumn{5}{c}{\textbf{带上下限的算符}} \\
+\hline
+\cmd{lim} & \cmd{limsup} & \cmd{liminf} & \cmd{sup} & \cmd{inf} \\
+\cmd{min} & \cmd{max} & \cmd{det} & \cmd{Pr} & \cmd{gcd} \\
+\hline
+\end{tabular}
+\end{table}
+
+\begin{example}
+\[
+ \lim_{x \rightarrow 0}
+ \frac{\sin x}{x}=1
+\]
+\end{example}
+
+\mathindex{bmod,pmod}
+对于求模表达式,\LaTeX{} 提供了 \cmd{bmod} 和 \cmd{pmod} 命令,前者相当于一个二元运算符,后者作为同余表达式的后缀:
+\begin{example}
+$a\bmod b \\
+ x\equiv a \pmod{b}$
+\end{example}
+
+\cmdindex[amsmath]{DeclareMathOperator}
+如果表 \ref{tbl:math-functions} 中的算符不够用的话,\pkg{amsmath} 允许用户用 \amscmd{Declare\-Math\-Operator}
+定义自己的算符,其中带星号的命令定义带上下限的算符:
+\begin{verbatim}
+\DeclareMathOperator{\argh}{argh}
+\DeclareMathOperator*{\nut}{Nut}
+\end{verbatim}
+
+\begin{example}
+\[\argh 3 = \nut_{x=1} 4x\]
+\end{example}
+
+\subsection{巨算符}\label{subsec:math-bigop}
+
+\msymindex{int,oint,sum,prod}
+积分号 \msym{int}、求和号 \msym{sum} 等符号称为\textbf{巨算符}。巨算符在行内公式和行间公式的大小和形状有区别。
+\begin{example}
+In text:
+$\sum_{i=1}^n \quad
+\int_0^{\frac{\pi}{2}} \quad
+\oint_0^{\frac{\pi}{2}} \quad
+\prod_\epsilon $ \\
+In display:
+\[\sum_{i=1}^n \quad
+\int_0^{\frac{\pi}{2}} \quad
+\oint_0^{\frac{\pi}{2}} \quad
+\prod_\epsilon \]
+\end{example}
+
+\mathindex{limits,nolimits}
+巨算符的上下标位置可由 \cmd{limits} 和 \cmd{nolimits} 调整,前者令巨算符类似 $\lim$ 或求和算符 $\sum$,上下标位于上下方;
+后者令巨算符类似积分号,上下标位于右上方和右下方。
+\begin{example}
+In text:
+$\sum\limits_{i=1}^n \quad
+\int\limits_0^{\frac{\pi}{2}} \quad
+\prod\limits_\epsilon $ \\
+In display:
+\[\sum\nolimits_{i=1}^n \quad
+\int\limits_0^{\frac{\pi}{2}} \quad
+\prod\nolimits_\epsilon \]
+\end{example}
+
+\cmdindex[amsmath]{substack}
+\envindex[amsmath]{subarray}
+\pkg{amsmath} 宏包还提供了 \amscmd{substack},能够在下限位置书写多行表达式;\amsenv{subarray}
+环境更进一步,令多行表达式可选择居中 (c) 或左对齐 (l):
+\begin{example}
+\[
+\sum_{\substack{0\le i\le n \\
+ j\in \mathbb{R}}}
+P(i,j) = Q(n)
+\]
+\[
+\sum_{\begin{subarray}{l}
+ 0\le i\le n \\
+ j\in \mathbb{R}
+\end{subarray}}
+P(i,j) = Q(n)
+\]
+\end{example}
+
+\subsection{数学重音和上下括号}\label{subsec:math-accents}
+
+\maccindex{dot,ddot,vec,hat}
+数学符号可以像文字一样加重音,比如求导符号 $\dot{r}$ (\cmd{dot}\marg*{r})、 $\ddot{r}$ (\cmd{ddot}\marg*{r})、
+表示向量的箭头 $\vec{r}$ (\cmd{vec}\marg*{r}) 、表示单位向量的符号 $\hat{\mathbf{e}}$ (\cmd{hat}\marg*{\cmd{mathbf}\marg*{e}}) 等,
+详见表 \ref{tbl:math-accents}。使用时要注意重音符号的作用区域,一般应当对某个符号而不是“符号加下标”使用重音:
+\begin{example}
+$\bar{x_0} \quad \bar{x}_0$\\[5pt]
+$\vec{x_0} \quad \vec{x}_0$\\[5pt]
+$\hat{\mathbf{e}_x} \quad
+ \hat{\mathbf{e}}_x$
+\end{example}
+
+\waccindex{overline,underline}
+\waccindex{widehat,overrightarrow}
+\LaTeX{} 也能为多个字符加重音,包括直接画线的 \cmd{overline} 和 \cmd{underline} 命令(可叠加使用)、宽重音符号 \cmd{widehat}、
+表示向量的箭头 \cmd{overrightarrow} 等。后两者详见表 \ref{tbl:math-accents} 和 \ref{tbl:math-arrow-accents} 等。
+\begin{example}
+$0.\overline{3} =
+\underline{\underline{1/3}}$ \\[5pt]
+$\hat{XY} \qquad \widehat{XY}$\\[5pt]
+$\vec{AB} \qquad
+\overrightarrow{AB}$
+\end{example}
+
+\waccindex{overbrace,underbrace}
+\cmd{overbrace} 和 \cmd{underbrace} 命令用来生成上/下括号,各自可带一个上/下标公式。
+\begin{example}
+$\underbrace{\overbrace{(a+b+c)}^6
+\cdot \overbrace{(d+e+f)}^7}
+_\text{meaning of life} = 42$
+\end{example}
+
+\subsection{箭头}\label{subsec:math-arrows}
+
+\msymindex{to,rightarrow,leftarrow,uparrow,downarrow}
+常用的箭头包括 \cmd{rightarrow} ($\rightarrow$,或 \cmd{to})、\cmd{leftarrow}($\leftarrow$,或 \cmd{gets})等。
+更多箭头详见表 \ref{tbl:math-arrows}。
+
+\cmdindex[amsmath]{xleftarrow,xrightarrow}
+\pkg{amsmath} 的 \amscmd{xleft\-arrow} 和 \amscmd{xright\-arrow} 命令提供了长度可以伸展的箭头,并且可以为箭头增加上下标:
+\begin{example}
+\[ a\xleftarrow{x+y+z} b \]
+\[ c\xrightarrow[x<y]{a*b*c}d \]
+\end{example}
+
+\subsection{括号和定界符}\label{subsec:math-delims}
+
+\LaTeX{} 提供了多种括号和定界符表示公式块的边界,如小括号 $()$、中括号 $[]$、
+大括号 $\{\}$(\cmd{\{} \cmd{\}})、尖括号 $\langle \rangle$ (\cmd{langle} \cmd{rangle})等。
+更多的括号/定界符命令见表 表 \ref{tbl:math-delims} 和 \ref{tbl:math-large-delims}。
+\begin{example}
+${a,b,c} \neq \{a,b,c\}$
+\end{example}
+
+\mathindex{left,right}
+\mathindex{right}
+使用 \cmd{left} 和 \cmd{right} 命令可令括号(定界符)的大小可变,在行间公式中常用。\LaTeX{} 会自动根据括号内的公式大小决定定界符大小。
+\cmd{left} 和 \cmd{right} 必须成对使用。需要使用单个定界符时,另一个定界符写成 \cmd{left.} 或 \cmd{right.}。
+\begin{example}
+\[1 + \left(\frac{1}{1-x^{2}}
+\right)^3 \qquad
+\left.\frac{\partial f}{\partial t}
+\right|_{t=0}\]
+\end{example}
+
+\mathindex{big,bigg,Big,Bigg}
+\mathindex{bigl,biggl,Bigl,Biggl}
+\mathindex{bigr,biggr,Bigr,Biggr}
+有时我们不满意于 \LaTeX{} 为我们自动调节的定界符大小。这时我们还可以用 \cmd{big}、\cmd{bigg} 等命令生成固定大小的定界符。
+更常用的形式是类似 \cmd{left} 的 \cmd{bigl}、\cmd{biggl} 等,以及类似 \cmd{right} 的 \cmd{bigr}、\cmd{biggr} 等
+(\cmd{bigl} 和 \cmd{bigr} 不必成对出现)。
+\begin{example}
+$\Bigl((x+1)(x-1)\Bigr)^{2}$\\
+$\bigl( \Bigl( \biggl( \Biggl( \quad
+\bigr\} \Bigr\} \biggr\} \Biggr\} \quad
+\big\| \Big\| \bigg\| \Bigg\| \quad
+\big\Downarrow \Big\Downarrow
+\bigg\Downarrow \Bigg\Downarrow$
+\end{example}
+
+使用 \cmd{big} 和 \cmd{bigg} 等命令的另外一个好处是:用 \cmd{left} 和 \cmd{right} 分界符包裹的公式块是不允许断行的
+(下文提到的 \env{array} 或者 \amsenv{aligned} 等环境视为一个公式块),所以也不允许在多行公式里跨行使用,
+而 \cmd{big} 和 \cmd{bigg} 等命令不受限制。
+
+\section{多行公式}\label{sec:multi-eqns}
+
+\subsection{长公式折行}\label{subsec:multline}
+
+通常来讲应当避免写出超过一行而需要折行的长公式。如果一定要折行的话,习惯上优先在等号之前折行,其次在加号、减号之前,再次在乘号、除号之前。
+其它位置应当避免折行。
+
+\envindex[amsmath]{multline}
+\pkg{amsmath} 宏包的 \amsenv{multline} 环境提供了书写折行长公式的方便环境。
+它允许用 \crcmd{} 折行,将公式编号放在最后一行。
+多行公式的首行左对齐,末行右对齐,其余行居中。
+\begin{example}
+\begin{multline}
+a + b + c + d + e + f
++ g + h + i \\
+= j + k + l + m + n\\
+= o + p + q + r + s\\
+= t + u + v + x + z
+\end{multline}
+\end{example}
+
+与表格不同的是,公式的最后一行不写 \crcmd,如果写了,反倒会产生一个多余的空行。
+
+\envindex[amsmath]{multline*}
+类似 \amsenv{equation*},\amsenv{multline*} 环境排版不带编号的折行长公式。
+
+\subsection{多行公式}\label{subsec:align}
+
+\pinyinindex{duohanggongshi}{多行公式|(}
+更多的情况是,我们需要罗列一系列公式,并令其按照等号对齐。
+
+读者可能阅读过其它手册或者资料,知道 \LaTeX{} 提供了 \env{eqnarray} 环境。它按照等号左边——等号——等号右边呈三列对齐,
+但等号周围的空隙过大,加上公式编号等一些 bug,目前已不推荐使用\footnote{\url{http://tug.org/pracjourn/2006-4/madsen/madsen.pdf}}。
+
+\envindex[amsmath]{align}
+\index{&@\texttt\& (\textit{单元格/对齐})}
+目前最常用的是 \amsenv{align} 环境,它将公式用 \texttt\& 隔为两部分并对齐。分隔符通常放在等号左边:
+\begin{example}
+\begin{align}
+a & = b + c \\
+& = d + e
+\end{align}
+\end{example}
+
+\cmdindex[amsmath]{notag}
+\amsenv{align} 环境会给每行公式都编号。我们仍然可以用 \amscmd{notag} 去掉某行的编号。
+在以下的例子,为了对齐等号,我们将分隔符放在右侧,并且此时需要在等号后添加一对括号 \texttt\{\texttt\} 以产生正常的间距:
+\begin{example}
+\begin{align}
+a ={} & b + c \\
+ ={} & d + e + f + g + h + i
+ + j + k + l \notag \\
+ & + m + n + o \\
+ ={} & p + q + r + s
+\end{align}
+\end{example}
+
+\amsenv{align} 还能够对齐多组公式,除等号前的 \texttt\& 之外,公式之间也用 \texttt\& 分隔:
+\begin{example}
+\begin{align}
+a &=1 & b &=2 & c &=3 \\
+d &=-1 & e &=-2 & f &=-5
+\end{align}
+\end{example}
+
+\envindex[amsmath]{gather}
+如果我们不需要按等号对齐,只需罗列数个公式,\amsenv{gather} 将是一个很好用的环境:
+\begin{example}
+\begin{gather}
+a = b + c \\
+d = e + f + g \\
+h + i = j + k \notag \\
+l + m = n
+\end{gather}
+\end{example}
+
+\envindex[amsmath]{align*,gather*}
+\amsenv{align} 和 \amsenv{gather} 有对应的不带编号的版本 \amsenv{align*} 和 \amsenv{gather*}。
+
+\subsection{公用编号的多行公式}\label{subsec:aligned}
+
+\envindex[amsmath]{aligned,gathered}
+另一个常见的需求是将多个公式组在一起公用一个编号,编号位于公式的居中位置。为此,\pkg{amsmath} 宏包
+提供了诸如 \amsenv{aligned}、\amsenv{gathered} 等环境,与 \env{equation} 环境套用。
+以 \texttt{-ed} 结尾的环境用法与前一节不以 \texttt{-ed} 结尾的环境用法一一对应。我们仅以 \amsenv{aligned} 举例:
+\begin{example}
+\begin{equation}
+\begin{aligned}
+a &= b + c \\
+d &= e + f + g \\
+h + i &= j + k \\
+l + m &= n
+\end{aligned}
+\end{equation}
+\end{example}
+
+\envindex[amsmath]{split}
+\amsenv{split} 环境和 \amsenv{aligned} 环境用法类似,也用于和 \env{equation} 环境套用,
+区别是 \amsenv{split} 只能将每行的一个公式分两栏,\amsenv{aligned} 允许每行多个公式多栏。
+
+\pinyinindex{duohanggongshi}{多行公式|)}
+
+\section{数组和矩阵}\label{sec:arrays}
+
+\envindex{array}
+\index{&@\texttt\& (\textit{单元格/对齐})}
+为了排版二维数组,\LaTeX{} 提供了 \env{array} 环境,用法与 \env{tabular} 环境极为类似,也需要定义列格式,并用 \crcmd{} 换行。
+数组可作为一个公式块,在外套用 \cmd{left}、\cmd{right} 等定界符:
+\begin{example}
+\[ \mathbf{X} = \left(
+\begin{array}{cccc}
+x_{11} & x_{12} & \ldots & x_{1n}\\
+x_{21} & x_{22} & \ldots & x_{2n}\\
+\vdots & \vdots & \ddots & \vdots\\
+x_{n1} & x_{n2} & \ldots & x_{nn}\\
+\end{array} \right) \]
+\end{example}
+
+值得注意的是,上一节末尾介绍的 \amsenv{aligned} 等环境也可以用定界符包裹。
+
+\mathindex{left}
+\mathindex{right}
+我们还可以利用空的定界符排版出这样的效果:
+\begin{example}
+\[ |x| = \left\{
+\begin{array}{rl}
+-x & \text{if } x < 0,\\
+0 & \text{if } x = 0,\\
+x & \text{if } x > 0.
+\end{array} \right. \]
+\end{example}
+
+\envindex[amsmath]{cases}
+不过上述例子可以用 \pkg{amsmath} 提供的 \amsenv{cases} 环境更轻松地完成:
+\begin{example}
+\[ |x| =
+\begin{cases}
+-x & \text{if } x < 0,\\
+0 & \text{if } x = 0,\\
+x & \text{if } x > 0.
+\end{cases} \]
+\end{example}
+
+\envindex[amsmath]{matrix,pmatrix,bmatrix,Bmatrix,vmatrix,Vmatrix}
+我们当然也可以用 \env{array} 环境排版各种矩阵。\pkg{amsmath} 宏包还直接提供了多种排版矩阵的环境,包括不带定界符的 \amsenv{matrix},
+以及带各种定界符的矩阵 \amsenv{pmatrix}($\bigl($)、\amsenv{bmatrix}($\bigl[$)、\amsenv{Bmatrix}($\bigl\{$)、
+\amsenv{vmatrix}($\bigl\vert$)、\amsenv{Vmatrix}($\bigl\Vert$)。使用这些环境时,无需给定列格式%
+\footnote{事实上这些矩阵内部也是用 \env{array} 环境生成的,列格式默认为 \texttt{*\{\Arg{n}\}\{c\}},\Arg{n} 默认为 10;
+\amsenv{cases} 内部是一个列格式为 \texttt{@\{\}l@\{\cmd{quad}\}l@\{\}} 的 \env{array} 环境。}:
+\begin{example}
+\[
+\begin{matrix}
+1 & 2 \\ 3 & 4
+\end{matrix} \qquad
+\begin{bmatrix}
+x_{11} & x_{12} & \ldots & x_{1n}\\
+x_{21} & x_{22} & \ldots & x_{2n}\\
+\vdots & \vdots & \ddots & \vdots\\
+x_{n1} & x_{n2} & \ldots & x_{nn}\\
+\end{bmatrix}
+\]
+\end{example}
+
+在矩阵中的元素里排版分式时,一来要用到 \amscmd{dfrac} 等命令,二来行与行之间有可能紧贴着,这时要用到
+\ref{subsec:tabular-colht} 小节的方法来调节间距:
+\begin{example}
+\[
+\mathbf{H}=
+\begin{bmatrix}
+\dfrac{\partial^2 f}{\partial x^2} &
+\dfrac{\partial^2 f}
+ {\partial x \partial y} \\[8pt]
+\dfrac{\partial^2 f}
+ {\partial x \partial y} &
+\dfrac{\partial^2 f}{\partial y^2}
+\end{bmatrix}
+\]
+\end{example}
+
+\section{公式中的间距}\label{sec:math-space}
+
+\cmdindex{quad,qquad}
+\index{,@\cmd{,}} % The only one which cannot use \cmdindex, oops..
+\mathindex{:,;,"!}
+前文提到过,绝大部分时候,数学公式中各元素的间距是根据符号类型自动生成的,需要我们手动调整的情况极少。
+我们已经认识了两个生成间距的命令 \cmd{quad} 和 \cmd{qquad}。在公式中我们还可能用到的间距包括 \cmd{,}、\cmd{:}、\cmd{;}
+以及负间距 \cmd{!},其中 \cmd{quad} 、 \cmd{qquad} 和 \cmd{,} 在文本和数学环境中可用,后三个命令只用于数学环境。
+文本中的 \cmd{\textvisiblespace} 也能使用在数学公式中。
+
+\newdimen\testdimen \testdimen=\fontdimen6\textfont2 \divide\testdimen18\relax
+\begin{center}
+\begin{tabularx}{0.9\textwidth}{*{3}{>{\raggedright\arraybackslash}X}|*{3}{>{\raggedright\arraybackslash}X}}
+ \hline
+ 无额外间距 & & $a a$ &
+ \cmd{,} & \demowidth{3\testdimen} & $a\,a$ \\
+ \cmd{quad} & \demowidth{18\testdimen} & $a\quad a$ &
+ \cmd{:} & \demowidth{4\testdimen} & $a\:a$ \\
+ \cmd{qquad} & \demowidth{36\testdimen} & $a\qquad a$ &
+ \cmd{;} & \demowidth{5\testdimen} & $a\;a$ \\
+ \cmd{\textvisiblespace} & \demowidth{\fontdimen2\textfont0} & $a\ a$ &
+ \cmd{!} & $-$\demowidth{3\testdimen} & $a\!a$ \\
+ \hline
+\end{tabularx}
+\end{center}
+
+一个常见的用途是修正积分的被积函数$f(x)$和微元$\mathrm{d}x$之间的距离。注意微元里的$\mathrm{d}$用的是直立体:
+\begin{example}
+\[
+\int_a^b f(x)\mathrm{d}x
+\qquad
+\int_a^b f(x)\,\mathrm{d}x
+\]
+\end{example}
+
+另一个用途是生成多重积分号。如果我们直接连写两个 \cmd{int},之间的间距将会过宽,此时可以使用负间距 \cmd{!} 修正之。
+不过 \pkg{amsmath} 提供了更方便的多重积分号,如二重积分 \amscmd{iint}、三重积分 \amscmd{iiint} 等。
+\begin{example}
+\newcommand\diff{\,\mathrm{d}}
+\begin{gather*}
+\int\int f(x)g(y)
+\diff x \diff y \\
+\int\!\!\!\int
+f(x)g(y) \diff x \diff y \\
+\iint f(x)g(y) \diff x \diff y \\
+\iint\quad \iiint\quad \idotsint
+\end{gather*}
+\end{example}
+
+\section{数学符号的字体控制}\label{sec:math-fonts}
+
+\subsection{数学字母字体}\label{subsec:math-alpha}
+
+\mathindex{mathrm,mathsf,mathtt,mathit,mathbf,mathcal,mathnormal}
+\cmdindex[amssymb]{mathbb,mathfrak}
+\cmdindex[mathrsfs]{mathscr}
+\LaTeX{} 允许一部分数学符号切换字体,主要是拉丁字母、数字、大写希腊字母以及重音符号等。
+表 \ref{tbl:math-fonts} 给出了切换字体的命令。某一些命令需要字体宏包的支持。
+\begin{example}
+$\mathcal{R} \quad \mathfrak{R}
+\quad \mathbb{R}$
+\[\mathcal{L}
+= -\frac{1}{4}F_{\mu\nu}F^{\mu\nu}\]
+$\mathfrak{su}(2)$ and
+$\mathfrak{so}(3)$ Lie algebra
+\end{example}
+
+\begin{table}[htp]
+\centering
+\caption{数学字母字体} \label{tbl:math-fonts}
+\begin{tabular}{*{3}{l}}
+\hline
+\textbf{示例} & \textbf{命令} & \textbf{依赖的宏包}\\
+\hline
+$\mathnormal{ABCDE abcde 1234}$ & \cmd{mathnormal}\marg*{\ldots}& \\
+$\mathrm{ABCDE abcde 1234}$ & \cmd{mathrm}\marg*{\ldots} & \\
+$\mathit{ABCDE abcde 1234}$ & \cmd{mathit}\marg*{\ldots} & \\
+$\mathbf{ABCDE abcde 1234}$ & \cmd{mathbf}\marg*{\ldots} & \\
+$\mathsf{ABCDE abcde 1234}$ & \cmd{mathsf}\marg*{\ldots} & \\
+$\mathtt{ABCDE abcde 1234}$ & \cmd{mathtt}\marg*{\ldots} & \\
+$\CMcal{ABCDE}$ & \cmd{mathcal}\marg*{\ldots} & 仅提供大写字母 \\
+\hline
+$\EuScript{ABCDE}$ & \cmd{mathcal}\marg*{\ldots} & \pkg{eucal} 仅提供大写字母 \\
+$\mathscr{ABCDE}$ & \cmd{mathscr}\marg*{\ldots} & \pkg{mathrsfs} 仅提供大写字母\\
+$\mathfrak{ABCDE abcde 1234}$ & \cmd{mathfrak}\marg*{\ldots} & \pkg{amssymb} 或 \pkg{eufrak} \\
+$\mathbb{ABCDE}$ & \cmd{mathbb}\marg*{\ldots} & \pkg{amssymb} 仅提供大写字母 \\
+\hline
+\end{tabular}
+\end{table}
+
+\pkgindex{unicode-math}
+如果需要为所有的数学符号切换字体,则需要直接调用数学字体宏包(见 \ref{subsec:font-pkgs} 小节)。在 \texttt{xelatex} 或者 \texttt{lualatex} 编译命令下,还可以使用基于 \pkg{fontspec} 宏包的 \pkg{unicode-math} 宏包配置 Unicode 数学字体,详见 \ref{subsec:unicode-math} 小节。
+
+\subsection{数学符号的尺寸}\label{subsec:math-styles}
+
+\mathindex{displaystyle,textstyle,scriptstyle,scriptscriptstyle}
+数学符号按照符号排版的位置规定尺寸,从大到小包括行间公式尺寸、行内公式尺寸、上下标尺寸、次级上下标尺寸。
+除了字号有别之外,行间和行内公式尺寸下的巨算符也使用不一样的大小。\LaTeX{} 为每个数学尺寸指定了一个切换的命令,见 \ref{tbl:math-size}。
+\begin{table}[htp]
+\centering
+\caption{数学符号尺寸}\label{tbl:math-size}
+\begin{tabular}{lll}
+ \hline
+ \textbf{命令} & \textbf{尺寸} & \textbf{示例} \\
+ \hline
+\cmd{displaystyle} & 行间公式尺寸 & $\displaystyle\sum a $\\
+\cmd{textstyle} & 行内公式尺寸 & $\textstyle\sum a $ \\
+\cmd{scriptstyle} & 上下标尺寸 & $\scriptstyle a$ \\
+\cmd{scriptscriptstyle} & 次级上下标尺寸 & $\scriptscriptstyle a$\\
+ \hline
+\end{tabular}
+\end{table}
+
+我们通过以下示例对比行间公式和行内公式的区别。在分式中,分子分母默认为行内公式尺寸,示例中将分母切换到行间公式尺寸:
+\begin{example}
+\[
+r = \frac
+ {\sum_{i=1}^n (x_i- x)(y_i- y)}
+ {\displaystyle \left[
+ \sum_{i=1}^n (x_i-x)^2
+ \sum_{i=1}^n (y_i-y)^2
+ \right]^{1/2} }
+\]
+\end{example}
+
+\subsection{加粗的数学符号}\label{subsec:math-bold}
+
+在 \LaTeX{} 中为符号切换数学字体并不十分自由,只能通过 \cmd{mathbf} 等有限的命令切换字体。比如想得到粗斜体的符号,就没有现成的命令%
+\footnote{国内使用粗斜体符号表示矢量,见 GB 3102.11--93。};再比如 \cmd{mathbf} 只能改变拉丁字母和大写希腊字母,小写希腊字母就没有用。
+
+\cmdindex{boldmath}
+\LaTeX{} 提供了一个命令 \cmd{boldmath} 令用户可以将整套数学字体切换为粗体版本(前提是数学字体宏包本身支持粗体符号)。但这个命令\textbf{只能在公式外使用}:
+\begin{example}
+$\mu, M \qquad
+\mathbf{\mu}, \mathbf{M}$
+\qquad {\boldmath$\mu, M$}
+\end{example}
+
+\cmdindex[amsmath]{boldsymbol}
+\pkg{amsmath} 提供了一个 \amscmd{boldsymbol} 命令(由调用的 \pkg{amsbsy} 宏包提供),用于打破 \cmd{boldmath} 的限制,
+在公式内部将一部分符号切换为粗体。
+\begin{example}
+$\mu, M \qquad
+\boldsymbol{\mu}, \boldsymbol{M}$
+\end{example}
+
+\pkgindex{bm}
+\cmdindex[bm]{bm}
+然而在许多数学字体宏包中,定界符、巨算符等一些符号本身没有粗体版本,\amscmd{boldsymbol} 也得不到粗体。
+\LaTeX{} 工具宏集之一的 \pkg{bm} 宏包可以用 \cmd{bm} 命令生成“伪粗体”,作为粗体符号的一个解决方案。这里不做过多介绍,
+详情请参考 \pkg{bm} 宏包的帮助文档。
+
+\section{定理环境}\label{sec:theorems}
+
+\subsection{\LaTeX{} 原始的定理环境}\label{subsec:latex-theorems}
+
+\cmdindex{newtheorem}
+使用 \LaTeX{} 排版数学和其他科技文档时,会接触到大量的定理、证明等内容。
+\LaTeX{} 提供了一个基本的命令 \cmd{newtheorem} 提供定理环境的定义:
+\begin{command}
+\cmd{newtheorem}\marg{theorem environment}\marg{title}\oarg{section-level} \\
+\cmd{newtheorem}\marg{theorem environment}\oarg{counter}\marg{title}
+\end{command}
+
+\Arg{theorem environment} 为定理环境的名称。原始的\LaTeX{} 里\textbf{没有现成的定理环境},
+不加定义而直接使用很可能会出错。\Arg{title} 是定理环境的标题(“定理”,“公理”等)。
+
+定理的序号由两个可选参数之一决定,它们\textbf{不能同时使用}:
+\begin{itemize}
+ \item \Arg{section level} 为章节级别,如 \texttt{chapter}、\texttt{section} 等,定理序号成为章节的下一级序号;
+ \item \Arg{counter} 为用 \cmd{newcounter} 自定义的计数器名称(详见 \ref{sec:counters} 节),定理序号由这个计数器管理。
+\end{itemize}
+如果两个可选参数都不用的话,则使用默认的与定理环境同名的计数器。
+
+在以下示例代码中,我们定义了一个 \env{mythm} 环境,其序号设为 \texttt{section} 的下一级序号。
+注意 \env{mythm} 环境的可选参数以及 \cmd{label} 的用法:
+\begin{example}
+\newtheorem{mythm}{My Theorem}[section]
+\begin{mythm}\label{thm:light}
+The light speed in vacuum
+is $299,792,458\,\mathrm{m/s}$.
+\end{mythm}
+\begin{mythm}[Energy-momentum relation]
+The relationship of energy,
+momentum and mass is
+\[E^2 = m_0^2 c^4 + p^2 c^2\]
+where $c$ is the light speed
+described in theorem \ref{thm:light}.
+\end{mythm}
+\end{example}
+
+\subsection{\pkg{amsthm} 宏包}\label{subsec:amsthm}
+
+\LaTeX{} 默认的定理环境格式为粗体标签、斜体正文、定理名用小括号包裹。如果需要修改格式,
+则要依赖其它的宏包,如 \pkg{amsthm}、\pkg{ntheorem} 等等。本小节简单介绍一下 \pkg{amsthm} 的用法。
+
+\pkgindex{amsthm}
+\cmdindex[amsthm]{theoremstyle}
+\pkg{amsthm} 提供了 \cmd{theo\-rem\-style} 命令支持定理格式的切换,
+在用 \cmd{new\-theo\-rem} 命令定义定理环境之前使用。
+\pkg{amsthm} 预定义了三种格式用于 \cmd{theo\-rem\-style}:\texttt{plain} 和 \LaTeX{} 原始的格式一致;
+\texttt{defi\-ni\-tion} 使用粗体标签、正体内容;\texttt{remark} 使用斜体标签、正体内容。
+
+另外 \pkg{amsthm} 还支持用带星号的 \cmd{new\-theo\-rem*} 定义不带序号的定理环境:
+\begin{verbatim}
+\theoremstyle{definition} \newtheorem{law}{Law}
+\theoremstyle{plain} \newtheorem{jury}[law]{Jury}
+\theoremstyle{remark} \newtheorem*{mar}{Margaret}
+\end{verbatim}
+\theoremstyle{definition} \newtheorem{law}{Law}
+\theoremstyle{plain} \newtheorem{jury}[law]{Jury}
+\theoremstyle{remark} \newtheorem*{mar}{Margaret}
+
+以上例子定义的 \env{jury} 环境与 \env{law} 环境共用编号,\env{mar} 环境不编号:
+\begin{example}
+\begin{law}\label{law:box}
+Don't hide in the witness box.
+\end{law}
+\begin{jury}[The Twelve]
+It could be you! So beware and
+see law~\ref{law:box}.\end{jury}
+\begin{jury}
+You will disregard the last
+statement.\end{jury}
+\begin{mar}No, No, No\end{mar}
+\begin{mar}Denis!\end{mar}
+\end{example}
+
+\pkg{amsthm} 还支持使用 \cmd{new\-theorem\-style} 命令自定义定理格式,
+更为方便使用的是 \pkg{ntheorem} 宏包。感兴趣的读者可参阅它们的帮助文档。
+
+\subsection{证明环境和证毕符号}\label{subsec:proof}
+
+\envindex[amsthm]{proof}
+\pkg{amsthm} 还提供了一个 \env{proof} 环境用于排版定理的证明过程。\env{proof} 环境末尾
+自动加上一个 \qedsymbol{} 证毕符号:
+\begin{example}
+\begin{proof}
+For simplicity, we use
+\[
+E=mc^2
+\]
+That's it.
+\end{proof}
+\end{example}
+
+\cmdindex[amsthm]{qedhere}
+如果行末是一个不带编号的公式,\qedsymbol{} 符号会另起一行,
+这时可使用 \cmd{qedhere} 命令将 \qedsymbol{} 符号放在公式末尾:
+\begin{example}
+\begin{proof}
+For simplicity, we use
+\[
+E=mc^2 \qedhere
+\]
+\end{proof}
+\end{example}
+
+\cmd{qedhere} 对于 \amsenv{align*} 等环境也有效:
+\begin{example}
+\begin{proof}
+Assuming $\gamma
+= 1/\sqrt{1-v^2/c^2}$, then
+\begin{align*}
+E &= \gamma m_0 c^2 \\
+p &= \gamma m_0v \qedhere
+\end{align*}
+\end{proof}
+\end{example}
+
+在使用带编号的公式时,建议最好\textbf{不要在公式末尾使用} \cmd{qedhere} 命令。
+对带编号的公式使用 \cmd{qedhere} 命令会使 \qedsymbol{} 符号放在一个难看的位置,紧贴着公式:
+\begin{example}
+\begin{proof}
+For simplicity, we use
+\begin{equation}
+E=mc^2.\qedhere
+\end{equation}
+\end{proof}
+\end{example}
+
+在 \amsenv{align} 等环境中使用 \cmd{qedhere} 命令会使 \qedsymbol{} 盖掉公式的编号;使用 \env{equation} 嵌套
+\amsenv{aligned} 等环境时,\cmd{qedhere} 命令会将 \qedsymbol{} 直接放在公式后。这些位置都不太正常。
+
+证毕符号 \qedsymbol{} 本身被定义在命令 \cmd{qedsymbol} 中,如果有使用实心符号作为证毕符号的需求,需要自行用 \cmd{re\-new\-comm\-and}
+命令修改(用法见 \ref{subsec:newcmd} 小节)\footnote{注意,这个改法\textbf{只对 \pkg{amsthm} 宏包适用}。
+其它宏包如 \pkg{ntheorem} 等须参考帮助文档里提供的修改方法。}。
+我们可以利用在 \ref{subsec:rules} 小节介绍的标尺盒子来生成一个适当大小的“实心矩形”:
+\begin{example}
+\renewcommand{\qedsymbol}%
+ {\rule{1ex}{1.5ex}}
+\begin{proof}
+For simplicity, we use
+\[
+E=mc^2 \qedhere
+\]
+\end{proof}
+\end{example}
+
+\endinput