首页 > 其他分享 >04_LaTeX之数学公式

04_LaTeX之数学公式

时间:2025-01-18 20:44:18浏览次数:1  
标签:LaTeX begin end 04 数学公式 公式 cmd quad example

04_\(\LaTeX{}\) 之数学公式

本章将见识到 \(\LaTeX{}\) 闻名的强项——排版数学公式。

\(AmS\) 宏集

在介绍数学公式排版之前,简单介绍一下 AmS 宏集。AmS宏集合是美国数学学会(American Mathematical Society)提供的对\(\LaTeX{}\) 原生的数学公式排版的扩展,其核心是 amsmath 宏包,对多行公式的排版提供了有力的支持。此外,amsfonts 宏包以及基于它的 amssymb 宏包提供了丰富的数学符号;amsthm 宏包扩展了 \(\LaTeX{}\) 定理证明格式。

以下示例都假定了导言区中写有 \usepackage{amsmath}

公式排版基础

行内和行间公式

数学公式有两种排版方式:其一是与文字混排,称为行内公式;其二是单独列为一行排版,称为行间公式

行内公式由一对 \(\texttt\$\) 符号包裹:

image-20250116220349275

单独成行的行间公式由 \(\texttt{equation}\) 环境包裹。 \(\texttt{equation}\) 环境为公式自动生成一个编号,这个编号可以用\label\ref 生成交叉引用,amsmath\eqref 命令甚至为引用自动加上圆括号;还可以用\tag 命令手动修改公式的编号,或者用\notag 命令取消为公式编号(与之基本等效的命令是 \nonumber)。

image-20250116220746833 image-20250116220821758

如果需要直接使用不带编号的行间公式,则将公式用命令 \[ 和 \] 包裹,与之等效的是 \(\texttt{displaymath}\) 环境。有的人更喜欢 \(\texttt{equation*}\) 环境,体现了带星号和不带星号的环境之间的区别。

image-20250116221231100

通过一个例子展示行内公式和行间公式的对比。为了与文字相适应,行内公式在排版大的公式元素(分式、巨算符等)时显得很“局促”:

image-20250116221343609

行间公式的对齐、编号位置等性质由文档类选项控制,文档类的 \(\texttt{fleqn}\) 选项令行间公式左对齐;\(\texttt{leqno}\) 选项令编号放在公式左边。

数学模式

当用户使用 \(\texttt\$\) 开启行内公式输入,或是使用 \[ 命令、\(\texttt{equation}\) 环境时,\(\LaTeX{}\) 就进入了数学模式

数学模式相比于文本模式有以下特点:

  1. 数学模式中输入的空格被忽略。数学符号的间距默认由符号的性质(关系符号、运算符等)决定。需要人为引入间距时,\quad\qquad 等命令。
  2. 不允许有空行(分段)。行间公式中也无法用 \\命令手动换行。
  3. 所有的字母被当作数学公式中的变量处理,字母间距与文本模式不一致,也无法生成单词之间的空格。如果想在数学公式中输入正体的文本,简单情况下可用 \mathrm 命令。或者用 \amsmath 提供的 \text 命令。
    image-20250116222301389

数学符号

\(\LaTeX{}\)​ 默认提供了常用的数学符号,amssymb 宏包提供了一些次常用的符号。大多数常用的数学符号都能在本章末尾的 \ref{sec:math-tables} 节列出的各个表格里查到。更多符号可在命令行输入texdoc symbols-a4查阅

一般符号

希腊字母符号的名称就是其英文名称,如 \(\alpha\) (\alpha)、\(\beta\) (\beta)等等。大写的希腊字母为首字母大写的命令 \(\Gamma\) (\Gamma) \(\Delta\) (\Delta)。无穷大符号为 \(\infty\) (\infty)。

省略号有 \(\dots\) (\dots) 和 \(\cdots\) (\cdots) 两种形式。它们有各自合适的用途:

$a_1, a_2, \dots, a_n$ \\
$a_1 + a_2 + \cdots + a_n$

\(a_1, a_2, \dots, a_n\)
\(a_1 + a_2 + \cdots + a_n\)

\ldots\dots 是完全等效的,它们既能用在公式中,也用来在文本里作为省略号。
除此之外,在矩阵中可能会用到竖排的 \(\vdots\) (\votes)和斜排的 \(\ddots\) (\ddots)。

指数、上下标和导数

^_标明上下标。注意上下标的内容(子公式)一般需要用花括号包裹,否则上下标只对后面的一个符号起作用。

$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$

$p^3_{ij} \qquad
m_\mathrm{Knuth}\qquad
\sum_{k=1}^3 k \( \)a^x+y \neq a^{x+y}\qquad
e{x2} \neq {ex}2$

导数符号'(\({}'\))是一类特殊的上标,可连续使用,但只能在其后添加其他上标:

$f(x) = x^2 \quad f'(x) = 2x \quad f''^{2}(x) = 4$

\(f(x) = x^2 \quad f'(x) = 2x \quad f''^{2}(x) = 4\)

分式和根式

分式使用 \frac{分子}{分母} 来书写。分式的大小在行间公式中是正常大小,而在行内被极度压缩。
amsmath 提供了方便的命令 \dfrac\tfrac,令用户能够在行内使用正常大小的分式,或是反过来。

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
image-20250118195233817

一般的根式使用 \sqrt{...};表示 \(n\) 次方根时写成 \sqrt[n]{...}

$\sqrt{x} \Leftrightarrow x^{1/2}
\quad \sqrt[3]{2}
\quad \sqrt{x^{2} + \sqrt{y}}$

\(\sqrt{x} \Leftrightarrow x^{1/2} \quad \sqrt[3]{2} \quad \sqrt{x^{2} + \sqrt{y}}\)

特殊的分式形式,如二项式结构,由 amsmath 宏包的 \binom 命令生成:

\[
\binom{n}{k} =\binom{n-1}{k}
+ \binom{n-1}{k-1}
\]

\(\binom{n}{k} =\binom{n-1}{k} + \binom{n-1}{k-1}\)

关系符

常见的关系符号除了可以直接输入的 \(=\),\(>\),\(<\),其它符号用命令输入,常用的有 \(\ne\) (\ne)、\(\ge\) (\ge)、\(\le\) (\le)、\(\approx\) (\approx)、 等价 \(\equiv\) (\equiv)、正比 \(\propto\) (\propto)、相似 \(\sim\)\sim 等等。

\(\LaTeX{}\) 还提供了自定义二元关系符的命令 \stackrel,用于将一个符号叠加在原有的二元关系符之上:

f_n(x) \stackrel{*}{\approx} 1

\(f_n(x) \stackrel{*}{\approx} 1\)

运算符

\(\LaTeX{}\) 中的算符大多数是二元算符,除了直接用键盘可以输入的 \(+\)、\(-\)、\(*\)、\(/\),其它符号用命令输入,常用的有乘号 $\times $ (\times)、 除号 \(÷\)(\div)、点乘 \(\cdot\) (\cdot)、加减号\(\pm\) (\pm) / \(\mp\) (\mp)等等。

\(\nabla\) (\nabla) 和 \(\partial\) (\partial) 也是常用的算符,虽然它们不属于二元算符。

\(\LaTeX{}\) 将数学函数的名称作为一个算符排版,字体为直立字体。其中有一部分符号在上下位置可以书写一些内容作为条件,
类似于后文所叙述的巨算符。

image-20250118202405498
\lim_{x \rightarrow 0} \frac{\sin x}{x} = 1

\[\lim_{x \rightarrow 0} \frac{\sin x}{x} = 1 \]

对于求模表达式,\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}
% \usepackage{amssymb}
[
\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)、
表示向量的箭头 \(\vec{r}\) (\cmd{vec}\marg{r}) 、表示单位向量的符号 \(\hat{\mathbf{e}}\) (\cmd{hat}\marg\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]{abc}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

与表格不同的是,公式的最后一行不写 \crcmd,如果写了,反倒会产生一个多余的空行。

\envindex[amsmath]{multline}
类似 \amsenv{equation
},\amsenv{multline*} 环境排版不带编号的折行长公式。

\subsection{多行公式}\label{subsec:align}

\pinyinindex{duohanggongshi}{多行公式|(}
更多的情况是,我们需要罗列一系列公式,并令其按照等号对齐。

读者可能阅读过其它手册或者资料,知道 \LaTeX{} 提供了 \env{eqnarray} 环境。
它按照等号左边——等号——等号右边呈三列对齐,但等号周围的空隙过大,加上公式
编号等一些 bug,目前已不推荐使用%
\footnote{Lars Madsen. \emph{Avoid eqnarray!}, \url{https://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{!}%
\footnote{\LaTeX{} 2020-10-01 版本之前,\cmd{:}、\cmd{;} 和 \cmd{!} 只能用于数学环境。}。
文本中的 \cmd{\textvisiblespace} 也能使用在数学公式中。

\newdimen\testdimen \testdimen=\fontdimen6\textfont2 \divide\testdimen18\relax
\begin{center}
\begin{tabularx}{0.9\textwidth}{{3}{>{\raggedright\arraybackslash}X}|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}
% \usepackage{amssymb}
\(\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
& \
\(\mathrm{ABCDE abcde 1234}\) & \cmd{mathrm}\marg{\ldots} & \
\(\mathit{ABCDE abcde 1234}\) & \cmd{mathit}\marg
& \
\(\mathbf{ABCDE abcde 1234}\) & \cmd{mathbf}\marg{\ldots} & \
\(\mathsf{ABCDE abcde 1234}\) & \cmd{mathsf}\marg
& \
\(\mathtt{ABCDE abcde 1234}\) & \cmd{mathtt}\marg{\ldots} & \
\(\CMcal{ABCDE}\) & \cmd{mathcal}\marg
& 仅提供大写字母 \
\hline
\(\EuScript{ABCDE}\) & \cmd{mathcal}\marg{\ldots} & \pkg{eucal} 仅提供大写字母 \
\(\mathscr{ABCDE}\) & \cmd{mathscr}\marg
& \pkg{mathrsfs} 仅提供大写字母\
\(\mathfrak{ABCDE abcde 1234}\) & \cmd{mathfrak}\marg{\ldots} & \pkg{amssymb} 或 \pkg{eufrak} \
\(\mathbb{ABCDE}\) & \cmd{mathbb}\marg
& \pkg{amssymb} 仅提供大写字母 \
\hline
\end{tabular}
\end{table}

一般来说,不同的数学字体往往带有不同的语义,如矩阵、向量等常会使用粗体或粗斜体,而数集常会使用 \cmd{mathbb} 表示。出于内容与格式分离以及方便书写的考虑,可以为它们定义新的命令。具体方法详见 \ref{subsec:newcmd} 小节。

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

\cmdindex[amsmath]{boldsymbol}
表 \ref{tbl:math-fonts} 中的 \cmd{mathbf} 命令只能获得直立、加粗的字母。如果想得到粗斜体%
\footnote{国内使用粗斜体符号表示矢量,见 GB/T 3102.11---1993。},可以使用 \pkg{amsmath} 宏包提供的
\amscmd{boldsymbol} 命令:
\begin{example}
\(\mu, M \qquad \boldsymbol{\mu}, \boldsymbol{M}\)
\end{example}

\pkgindex{bm}
\cmdindex[bm]{bm}
也可以使用 \pkg{bm} 宏包提供的 \cmd{bm} 命令:
\begin{example}
% \usepackage{bm}
\(\mu, M \qquad \bm{\mu}, \bm{M}\)
\end{example}
在 \LaTeX{} 默认的数学字体中,一些符号本身并没有粗体版本,使用 \amscmd{boldsymbol} 也得不到粗体。
此时 \cmd{bm} 命令会生成“伪粗体”,尽管效果比较粗糙,但在某些时候也不失为一种解决方案。

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

\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

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

标签:LaTeX,begin,end,04,数学公式,公式,cmd,quad,example
From: https://www.cnblogs.com/Invinc-Z/p/18678831

相关文章

  • 学习012-04-09-01-02 How to: Show a Custom Data-Bound Control in an XAF View (Bla
    Howto:ShowaCustomData-BoundControlinanXAFView(Blazor)-CurrentObjectData(如何:在XAF视图(Blazor)中显示自定义数据绑定控件-当前对象数据)ThisarticleexplainshowtocreateareusableViewItemthatcanworkwithdatasuppliedbytheView’sc......
  • Java初学者笔记-04、异常与泛型
    异常异常代表程序出现的问题。Error错误和Exception异常。RuntimeException运行时异常。编译时异常,提醒程序员这里的程序很容易出错。异常的基础处理抛出给上层调用者。使用try-catch处理。异常的处理方案底层异常抛出,最外层捕获异常记录异常并响应合适信息。(少见)最......
  • 举例说明如何在页面中添加数学公式?
    在前端开发中,向页面添加数学公式可以通过多种方法实现,以下是一些具体的例子和步骤:使用HTML转义字符:对于简单的数学公式,如“E=mc^2”,可以直接使用HTML转义字符来表示。例如,使用<sup>标签来表示上标:<p>E=mc<sup>2</sup></p>这种方法简单易行,但仅适用于简单的公式。使用Mat......
  • Cesium+Vue3教程(004):基于Vue3的Cesium添加地形和自定义地形
    文章目录03-添加地形与自定义地形添加地形添加水纹和光照效果加载自定义地形03-添加地形与自定义地形添加地形实现代码:constviewer=newCesium.Viewer("cesiumContainer",{terrainProvider:Cesium.createWorldTerrain(......
  • 【GMTSAR】虚拟机Ubuntu22.04使用GMTSAR进行D-InSAR和SBAS-InSAR处理
    近期学习了一下GMTSAR,记录一下使用过程电脑为处理器为i7-13700K,给虚拟机分配了32G内存。大致的处理流程命令如下(因为懒得截图以及复制起来简单直接写在了txt文本里)虚拟机挂载共享文件夹虚拟机的安装教程CSDN有很多,可以看最新的教程,去官网下载新版(但是要创建账号填写相关......
  • Ubuntu 22.04 上安装和使用 ComfyUI
    在Ubuntu22.04上安装和使用ComfyUI可以按照以下步骤进行:安装前的准备确保系统更新到最新打开终端并运行:sudoaptupdatesudoaptupgrade安装Python3和pip如果没有安装Python3和pip,可以通过以下命令进行安装:sudoaptinstallpython3python3-pip......
  • [CF2048F] Kevin and Math Class 题解
    注意到这里有个区间的\(b_i\)最小。我们考虑每个\(b_i\)作为最小的时候各操作几次。显然每个\(b_i\)的【操作区间】更长是不劣的。于是这些个\(b_i\)是可以打成笛卡尔树,进行DP。想到这一点,DP便是不难的了。定义\(f_{i,j}\)为以\(i\)为根的子树内,最优操作后最大值......
  • SpringCloudAlibaba:从0搭建一套快速开发框架-04 OpenFeign的使用
    序言:上篇安装了Nacos并注册了系统服务,本篇主要介绍OpenFeign的集成使用。OpenFeign简介OpenFeign是一个声明式的HTTP客户端,它通过注解的方式简化了调用RESTfulAPI的过程。它是SpringCloud的一部分,用于在微服务架构中简化服务间的通信。与传统的使用RestTemplate......
  • Ubuntu20.04取消root账号自动登录方法触觉智能RK3568开发板演示
    Ubuntu20.04默认情况下为root账号自动登录,本文介绍如何取消root账号自动登录,改为通过输入账号密码登录,使用触觉智能EVB3568鸿蒙开发板演示,搭载瑞芯微RK3568,四核A55处理器,主频2.0Ghz,1T算力NPU;支持OpenHarmony5.0及Linux、Android等操作系统,接口丰富,开发评估快人一步!添加新账号1、......
  • [rustGUI][iced]基于rust的GUI库iced(0.13)的部件学习(04):实现窗口主题(颜色)变换(暨menu菜单
    前言本文是关于iced库的部件介绍,iced库是基于rust的GUI库,作者自述是受Elm启发。iced目前的版本是0.13.1,相较于此前的0.12版本,有较大改动。本合集是基于新版本的关于分部件(widget)的使用介绍,包括源代码介绍、实例使用等。环境配置系统:window10平台:visualstudiocode语言:rust......