跳到主要内容

数学公式

LaTeX 以其强大的数学公式排版能力著称,这是它成为学术写作首选工具的重要原因之一。本章将详细介绍如何在 LaTeX 中编写专业、美观的数学公式。

数学模式深入理解

LaTeX 的数学排版基于"数学模式"的概念。在数学模式下,LaTeX 使用特殊的字体、间距规则和排版逻辑来处理公式。

为什么需要数学模式?

普通文本模式和数学模式的排版规则完全不同:

排版规则普通文本数学模式
字体斜体用于强调变量斜体,运算符正体
间距单词间有空格根据运算符自动调整
连字启用(如 fi, fl)禁用
断行允许单词间断行公式通常不换行
标点文本标点数学标点(如 $x, y$

行内公式与行间公式

行内公式嵌入在段落文本中,字体略小,适合短公式:

著名的质能方程 $E = mc^2$ 由爱因斯坦提出。

行内公式会压缩上下标以减少行距变化:

% 行内:上下标在右侧
$\sum_{i=1}^n x_i$

% 对比:行间公式上下标在上下
\[\sum_{i=1}^n x_i\]

行间公式独立成行,居中显示,使用完整尺寸:

重要的积分公式:
\[
\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
\]

推荐与不推荐的语法

% 推荐方式
$E = mc^2$ % 简洁,兼容性好
\[E = mc^2\] % 标准,不会产生不良间距

% 不推荐方式
$$E = mc^2$$ % 已过时,可能产生错误间距

为什么不推荐 $$...$$

$$ 是 TeX 的原始语法,在 LaTeX 中存在以下问题:

  • 不与 fleqn 文档选项正确配合
  • 可能产生不正确的垂直间距
  • 无法使用 amsmath 提供的高级功能

数学模式中的文本

在数学模式中插入普通文本需要使用 \text 命令:

\[
f(x) = \begin{cases}
x^2, & \text{如果 } x \geq 0 \\
-x^2, & \text{如果 } x `<` 0
\end{cases}
\]

常见错误:直接在数学模式中写中文或英文单词

% 错误:中文和英文单词会变成斜体变量
\[ x 是正数 \] % "是"和"正数"会显示异常

% 正确:使用 \text 命令
\[ x \text{ 是正数} \]

amsmath 宏包配置

amsmath 是数学排版的必备宏包,提供了丰富的数学环境和命令。建议在所有包含数学公式的文档中加载它。

基本配置

\usepackage{amsmath}      % 核心数学功能
\usepackage{amssymb} % 扩展数学符号
\usepackage{mathtools} % amsmath 的扩展(可选但推荐)

mathtools 的优势

mathtoolsamsmath 的超集,修复了一些问题并添加了新功能:

\usepackage{mathtools}

% 改进的括号自动调整
\[
\DeclarePairedDelimiter{\abs}{\lvert}{\rvert}
\abs{x} % 不调整大小
\abs*{\frac{a}{b}} % 自动调整大小
\abs[\bigg]{x} % 手动指定大小
\]

% dcases 环境:自动使用 displaystyle
\[
f(x) = \begin{dcases}
\frac{x^2}{2}, & x \geq 0 \\
-\frac{x^2}{2}, & x `<` 0
\end{dcases}
\]

基本运算详解

四则运算与运算符

LaTeX 区分"运算符"和"普通符号":

% 运算符:自动处理间距
$a + b$ % 加号是运算符,前后有适当间距

% 普通符号:无特殊间距
$a \times b$ % 乘号也是运算符
$a \cdot b$ % 点乘

% 比较不同乘号的用法
$a \cdot b$ % 点乘,用于标量积
$a \times b$ % 叉乘,用于向量积
$a b$ % 省略乘号(变量并排)

上下标深入理解

上下标可以嵌套和组合,但要注意花括号的使用:

% 单字符上下标
$x^2$ % 上标
$x_1$ % 下标

% 多字符必须用花括号
$x^{10}$ % 正确:x 的 10 次方
$x^10$ % 错误:输出 x¹0

% 嵌套上下标
$x^{y^z}$ % x 的 y^z 次方
$x_{i_j}$ % x 的 i_j 下标

% 同时使用上下标
$x_1^2$ % 下标在前或后都可以
$x^2_1$ % 效果相同

% 复合结构
$^{235}_{92}U$ % 铀-235的核素表示

分数的正确使用

LaTeX 提供三种分数命令,适用于不同场景:

% \frac:标准分数
$\frac{a}{b}$ % 标准大小

% \dfrac:display分数,强制使用行间公式大小
$\dfrac{a}{b}$ % 较大,适合行内需要强调的分数

% \tfrac:text分数,强制使用行内公式大小
$\tfrac{a}{b}$ % 较小,适合行间公式中的小分数

% 连续分数
\[
\cfrac{1}{1+\cfrac{1}{1+\cfrac{1}{1+x}}}
\]

选择建议

场景推荐命令
行内普通分数\frac\tfrac
行间主公式分数\frac\dfrac
行间公式中的小分数\tfrac
连分数\cfrac

根号的细节

$\sqrt{x}$             % 平方根
$\sqrt[3]{x}$ % 立方根
$\sqrt[n]{x}$ % n 次根

% 嵌套根号
$\sqrt{\sqrt[3]{x}}$

% 根号内的分数会自动调整大小
$\sqrt{\frac{a}{b}}$

求和、积分与极限

求和符号

求和符号的位置根据公式环境自动调整:

% 行内:上下标在右侧
$\sum_{i=1}^{n} x_i$

% 行间:上下标在上下
\[\sum_{i=1}^{n} x_i\]

% 强制上下位置(使用 \limits)
$\sum\limits_{i=1}^{n} x_i$

% 取消上下位置(使用 \nolimits)
\[\sum\nolimits_{i=1}^{n} x_i\]

多条件求和

% 使用 \substack 处理多行条件
\[
\sum_{\substack{0 \le i \le n \\ 0 \le j \le m}} a_{ij}
\]

% 或使用 aligned
\[
\sum_{\begin{aligned} &i=1,\ldots,n \\ &j=1,\ldots,m \end{aligned}} a_{ij}
\]

积分符号

% 基本积分
$\int_a^b f(x) dx$ % dx 前应有空格

% 推荐添加小空格
$\int_a^b f(x) \, dx$ % \, 提供小空格

% 多重积分
$\iint_D f(x,y) \, dx \, dy$
$\iiint_V f(x,y,z) \, dx \, dy \, dz$

% 围道积分
$\oint_C f(z) \, dz$

% 积分限的特殊位置
$\int\limits_a^b f(x) \, dx$

微分符号的最佳实践

% 定义微分命令(推荐放在导言区)
\newcommand{\dif}{\mathrm{d}} % 直立的 d

% 使用
$\int_a^b f(x) \, \dif x$

% 或使用 physics 宏包
\usepackage{physics}
$\int_a^b f(x) \dd x$ % \dd 自动处理

极限

% 基本极限
$\lim_{x \to \infty} f(x)$

% 行间显示
\[\lim_{x \to \infty} f(x)\]

% 带方向的极限
\[\lim_{x \to 0^+} f(x)\] % 右极限
\[\lim_{x \to 0^-} f(x)\] % 左极限

% 多变量极限
\[\lim_{\substack{x \to 0 \\ y \to 0}} f(x,y)\]

矩阵排版

各种矩阵环境

amsmath 提供了多种矩阵环境:

环境括号类型示例
matrix无括号ab\begin{matrix} a & b \end{matrix}
pmatrix圆括号 ()(ab)\begin{pmatrix} a & b \end{pmatrix}
bmatrix方括号 [][ab]\begin{bmatrix} a & b \end{bmatrix}
Bmatrix花括号 {ab}\begin{Bmatrix} a & b \end{Bmatrix}
vmatrix单竖线 ||ab\begin{vmatrix} a & b \end{vmatrix}
Vmatrix双竖线 |||ab\begin{Vmatrix} a & b \end{Vmatrix}
% 基本矩阵
\[
\begin{pmatrix}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23}
\end{pmatrix}
\]

% 分块矩阵
\[
\begin{pmatrix}
A & B \\
C & D
\end{pmatrix}
\]

% 带省略号的大型矩阵
\[
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn}
\end{pmatrix}
\]

行内小矩阵

对于行内公式中的小型矩阵,使用 smallmatrix 环境:

% 小矩阵(无括号)
$(\begin{smallmatrix} a & b \\ c & d \end{smallmatrix})$

% 使用 mathtools 的 psmallmatrix(有括号)
$\begin{psmallmatrix} a & b \\ c & d \end{psmallmatrix}$

多行公式对齐

align 环境

align 是最常用的多行公式环境,使用 & 指定对齐位置:

% 多个等式对齐
\begin{align}
a &= b + c \\
&= d + e + f
\end{align}

% 多组对齐
\begin{align}
a &= b &\quad c &= d \\
e &= f &\quad g &= h
\end{align}

% 不编号的行(使用 \nonumber 或 \notag)
\begin{align}
a &= b + c \nonumber \\
&= d + e \label{eq:example}
\end{align}

% 整个环境不编号
\begin{align*}
a &= b + c \\
&= d + e
\end{align*}

gather 环境

当公式不需要对齐时使用 gather

\begin{gather}
a = b + c \\
d = e + f + g
\end{gather}

multline 环境

对于超长公式,使用 multline 自动分段:

\begin{multline}
a + b + c + d + e + f + g + h + i \\
+ j + k + l + m + n + o + p
\end{multline}

split 环境

equation 环境内分行:

\begin{equation}
\begin{split}
(a + b)^2 &= a^2 + 2ab + b^2 \\
(a - b)^2 &= a^2 - 2ab + b^2
\end{split}
\end{equation}

环境选择指南

场景推荐环境
多个等式,对齐等号align
多个等式,无需对齐gather
超长单公式multline
单编号的分行公式equation + split
条件定义(分段函数)cases

定界符与括号

自动调整大小

使用 \left\right 自动匹配括号大小:

% 自动调整
\[
\left( \frac{a}{b} \right)
\]

% 支持多种括号
\left( ... \right) % 圆括号
\left[ ... \right] % 方括号
\left\{ ... \right\} % 花括号(需转义)
\left| ... \right| % 竖线
\left\| ... \right\| % 双竖线
\left\langle ... \right\rangle % 尖括号

注意事项

% \left 和 \right 必须成对出现
% 如果只需要一边的括号,用 . 表示空

\[
\left. \frac{\dif y}{\dif x} \right|_{x=0}
\]

% 有时自动调整不够精确,可以手动调整
\[
\bigl( \Bigr( \biggl( \Biggl(
\]

% 大小顺序:`\big` `<` `\Big` `<` `\bigg` `<` `\Bigg`

推荐的括号命令

使用 mathtools\DeclarePairedDelimiter 创建语义化的括号命令:

% 在导言区定义
\DeclarePairedDelimiter{\abs}{\lvert}{\rvert}
\DeclarePairedDelimiter{\norm}{\lVert}{\rVert}
\DeclarePairedDelimiter{\braket}{\langle}{\rangle}
\DeclarePairedDelimiter{\set}{\{}{\}}

% 使用
$\abs{x}$ % 固定大小
$\abs*{\frac{a}{b}}$ % 自动调整
$\abs[\bigg]{x}$ % 手动指定

$\norm{\mathbf{v}}$
$\braket{\psi|\phi}$
`$\set{x \in \mathbb{R} \mid x > 0}$`

数学字体

LaTeX 提供多种数学字体,用于表示不同的数学对象:

命令字体用途
\mathbb{R}黑板粗体数集(R\mathbb{R}, C\mathbb{C}, N\mathbb{N}
\mathbf{x}粗体向量、矩阵
\mathcal{L}花体算子、变换(如拉格朗日量 L\mathcal{L}
$\mathscr{L}$手写体高级花体
\mathfrak{g}哥特体李代数等
\mathsf{x}无衬线特殊标识
\mathtt{x}等宽代码、算法
% 常用数集符号
$\mathbb{R}$ - 实数集
$\mathbb{C}$ - 复数集
$\mathbb{N}$ - 自然数集
$\mathbb{Z}$ - 整数集
$\mathbb{Q}$ - 有理数集

% 向量表示
$\mathbf{v} = (v_1, v_2, v_3)$

% 算子
$\mathcal{L}[f] = \int_0^\infty f(t) e^{-st} dt$

% 哥特体(李代数)
$\mathfrak{sl}(n, \mathbb{C})$

黑体向量的最佳实践

% 使用 bm 宏包获得更好的粗体效果
\usepackage{bm}

$\bm{x}$ % 粗斜体向量
$\mathbf{x}$ % 粗正体

% 希腊字母粗体
$\bm{\alpha}$ % 需要 bm 宏包

定理环境

定义定理环境

% 在导言区定义
\usepackage{amsthm}

\theoremstyle{plain} % 斜体正文
\newtheorem{theorem}{定理}[section]
\newtheorem{lemma}[theorem]{引理}
\newtheorem{corollary}[theorem]{推论}

\theoremstyle{definition} % 正体正文
\newtheorem{definition}{定义}[section]
\newtheorem{example}{例}[section]

\theoremstyle{remark} % 正体正文,无编号
\newtheorem*{remark}{注}

使用定理环境

\begin{theorem}[勾股定理]
直角三角形两条直角边的平方和等于斜边的平方。
\end{theorem}

\begin{proof}
设直角边为 $a$、$b$,斜边为 $c$。
通过面积法可以证明 $a^2 + b^2 = c^2$。
\end{proof}

\begin{definition}
设 $f: \mathbb{R} \to \mathbb{R}$,若对任意 $x, y$ 有
$f(x+y) = f(x) + f(y)$,则称 $f$ 为加性函数。
\end{definition}

自定义定理样式

\newtheoremstyle{mytheorem}
{10pt} % 上方间距
{10pt} % 下方间距
{\itshape} % 正文字体
{} % 缩进
{\bfseries} % 标题字体
{.} % 标题后标点
{ } % 标题后间距
{\thmname{#1}\thmnumber{ #2}\thmnote{ (#3)}}

\theoremstyle{mytheorem}
\newtheorem{proposition}{命题}

常见问题与解决方案

问题1:公式编号不正确

% 问题:公式编号与引用不匹配
% 解决:多次编译

xelatex document.tex % 第一遍:生成标签
xelatex document.tex % 第二遍:更新引用

问题2:公式过长超出页边

% 方案1:使用 multline 环境
\begin{multline}
很长的公式...
\end{multline}

% 方案2:手动分行
\begin{align}
f(x) &= A + B + C \\
&\quad + D + E
\end{align}

% 方案3:使用 \resizebox(不推荐,仅作应急)
\resizebox{.9\linewidth}{!}{$很长的公式$}

问题3:行内公式破坏行距

% 问题:分数或大型公式使行距不均匀
% 解决:使用 \smash 或 \mathclap

% 使用 smash 隐藏高度
$\smash{\dfrac{a}{b}}$

% 使用 mathtools 的 \mathclap 处理宽公式
$\sum_{\mathclap{i=1,\ldots,n}} a_i$

问题4:矩阵中的点号位置不正确

% 水平点
$\cdots$ % 居中水平点(运算符之间)
$\ldots$ % 底部水平点(列表项之间)
$\vdots$ % 垂直点
$\ddots$ % 对角点

% 正确的矩阵点号使用
\[
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn}
\end{pmatrix}
\]

问题5:中文数学字体问题

% 使用 ctex 宏包自动处理
\usepackage{ctex}

% 或使用 xeCJK 单独配置
\usepackage{xeCJK}
\setCJKmainfont{SimSun}

宏包推荐

宏包用途
amsmath数学公式核心(必需)
amssymb扩展数学符号
mathtoolsamsmath 扩展(推荐)
bm粗体数学符号
physics物理学常用符号和宏
unicode-mathUnicode 数学字体(XeLaTeX/LuaLaTeX)
breqn自动断行公式

小结

本章详细介绍了 LaTeX 数学公式排版:

  • 数学模式:理解行内与行间公式的区别和使用场景
  • amsmath 配置:使用 amsmathmathtools 增强数学排版
  • 基本运算:正确使用上下标、分数、根号
  • 求和积分极限:理解 \limits\nolimits 的作用
  • 矩阵排版:掌握各种矩阵环境和省略号使用
  • 多行公式:根据需求选择 aligngathermultline 等环境
  • 定界符:正确使用 \left/\right 和手动调整
  • 数学字体:区分数集、向量、算子等的字体表示
  • 定理环境:定义和使用专业的定理样式

LaTeX 的数学排版功能是其最强大的特性之一,熟练掌握这些技巧可以显著提升学术论文的专业性。