amsmath 精讲:多行公式与编号

单行公式用好数学模式就够了,真正的挑战从多行公式开始:长公式如何换行、多组方程如何对齐、编号如何统一管理。数学宏包正是为此而生,它把需要大量手工调整的多行结构封装成语义化环境。本文按场景拆解几大主力环境,并讲清自定义编号这个新手最容易迷糊的环节。所有环境行为以宏包官方文档为准,本文只覆盖最稳定的常用部分。

一、加载与总览

加载方式只有一行,但它的环境图谱值得先记住:不同环境对应不同语义,选错就要返工。

环境 用途 编号
单行公式 单行 单个编号
多公式罗列 多公式独立成行 每行一个
对齐环境 按符号竖直对齐 每行一个
拆行环境 长公式拆行(包在编号环境内) 整体一个
分段函数 分情况讨论 无

星号版本的规律是统一的:带星号无编号,不带星号逐行编号。记不住时想想「星号等于静默」。

选择环境的第一判断点是「语义」:这些行是一个公式的分解,还是多个独立公式?前者用拆行,后者用罗列或对齐。写作时先问这个问题,比看完示例套用更不容易选错。环境图谱不用全背,把「罗列、对齐、拆行、分段」四个名字记住,遇到结构先归类再查写法即可。

这套环境封装的意义值得多说一句:没有它们之前,作者要用底层排版原语手工调节每行间距与对齐,一个复杂推导可能耗掉半小时。语义化环境把「我想要什么」与「怎么排」分离——你只负责声明结构,排版细节交给宏包。理解了这一点,就会更信任环境的默认行为,少做无谓的手工微调。宏包官方文档里每个环境都有配图示例,写作时当作字典翻即可。

二、多公式独立排版

当多个公式不需要按等号对齐,只需要整齐排列时,罗列环境是最直接的选择。每行公式间自动添加均匀间距。

\documentclass{ctexart}
\usepackage{amsmath}
\begin{document}
\begin{gather}
  a = b + c \\
  d = e + f
\end{gather}
\end{document}

换行用双反斜杠。若某行不想编号,在换行前加取消编号命令——这在整理推导过程时很常见:中间步骤无需编号,只有首尾公式需要引用。取消编号有两个等价命令,选一个全文统一即可。长文档的统一性永远比个人偏好重要。

一个排版细节值得知道:罗列环境里的行间距由环境自动调节,簇拥多行时不用担心撞行。但若某行公式特别高(含分式或求和),引擎自动加距后仍可能显挤,这时可以手动在换行符后加间距微调。先信任默认,眼睛不舒服再动手,这是排版的基本节奏。

取消编号的常见场景值得多想一步:有些作者习惯给每条公式都编号,理由是「万一下文要引用呢」。但编号膨胀后,读者看到的式(十五)很难回指。克制编号只标出被引用的公式,阅读体验会好得多——编号也是版面资源,用在该用的地方。这条克制原则同样适用于图表编号,是全文编号体系统一性的体现,值得在开写前就与图表编号一起规划好。

三、按符号对齐

对齐环境是使用频率最高的环境。它在每行用对齐标记符号标出对齐点,通常放在等号或关系符之前,视觉上形成一道整齐的竖线。

\begin{align}
  f(x) &= (x+1)^2 \\
       &= x^2 + 2x + 1
\end{align}

两个细节决定成败:其一,对齐标记的数量与位置要对齐连续各行(每行一个,且都放在关系符前);其二,多组公式并列时用双标记分隔。换行符与对齐标记的相对顺序一定是先标记后换行,写反会报「错位对齐标记」错误。

对齐点选在哪里也有讲究:默认习惯是等号前,让所有等号连成一条竖线,推导关系一目了然。但有时候按「首项对齐」更自然,比如让每行的变量名对齐。这类选择没有对错,服从可读性——多打印两份对比,选让你自己读着更轻松的那个。

另一个新手障碍是「双标记分隔并列公式」这个写法:在一行里放两组独立公式,用双标记隔开,常用于节省版面展示两组对应关系。它容易与单标记混淆,第一次用务必照官方示例逐字符对照。加错的表现通常是对齐错乱,一眼能看出来。

拆行环境是它的特化版,用于把一个超长公式拆成多行但整体只占一个编号。它必须包在编号环境内部:

\begin{equation}
\begin{split}
  (a+b+c)^2 &= a^2 + b^2 + c^2 \\
            &\quad + 2ab + 2bc + 2ca
\end{split}
\end{equation}

第二行开头的字宽间隔是常用技巧:让续行与首行主体产生缩进,层次更清楚。

拆行环境还有一条隐形规则:内部的对齐标记仍然有效,所以拆行与对齐可以叠加——一边整体一个编号,一边保持等号对齐。这正是它区别于「把公式砍成两段各自编号」的核心价值。若发现拆行后续行顶格很难看,多半是漏了字宽间隔,加上即可。

长公式拆行还有个内容层面的建议:拆在「加号、逗号」等低优先级运算符处,比拆在等号或分式中间更不伤可读性。拆行点本质上是读者的呼吸点——选在语义最自然的停顿处,读者顺着读下来甚至察觉不到拆过行。这条经验多用于含长连加或嵌套括号的公式,简单公式则完全不必动用它。

四、编号控制与自定义

编号相关的需求集中在三类:整体引用(一个编号管多行)、引用格式、按章节编号。对应的实现方式如下表。

需求 写法
多行公式单个编号 拆行环境包在编号环境中
公式编号按章 按节编号声明
指定某行编号 手工编号命令
引用输出带括号 专用引用命令或智能引用宏包

注意专用引用命令自动带括号,而普通引用只给数字。标签紧跟环境起始即可,但不要放在换行符之后。手工编号是允许人工编号的入口,正文引用与之保持一致(系统不自动校验),因此全文统一维护一份编号清单更稳妥。

按章编号在长篇里特别有用:读者引用「式(3.2)」时能立刻定位章节。但注意它与整体编号方案联动——修改按章声明后,旧引用全部要重新编译两遍才能更新。合稿阶段最容易在这里出幺蛾子:各章作者若分别用了不同编号方案,合稿后引用会大面积错位。团队协作时把编号方案写进协作规范第一条,见本站论文写作指南的合稿章节。若想让合作者迅速理解你的编号约定,在源码注释里写一行说明,成本极低收益可观。

五、常见错误与日志关键词

报错大多集中在对齐标记与换行符的误用上,记住下面的对照表能快速定位。这类报错的特征是日志关键词非常明确(错位标记、多余括号),属于看关键词就能修的那一类,不必慌张。真正难缠的是「环境嵌套层数过多」这类提示——通常是拆行环境忘了闭合,报错位置却在千里之外,处理办法见「编译排错」一章的二分定位法。

日志关键词 根因 修法
错位对齐标记 标记出现在非对齐环境 检查环境是否匹配
多余括号 行末换行符写错 统一换行命令
未定义命令 未加载数学宏包 导言区加载
无限参数 漏写换行或环境未闭合 补齐结构
编号引用为问号 编译遍数不足 完整编译两遍

一个检验学习成果的小练习:把上面那个对齐示例的编号个数数清楚,再改写成拆行形式并引用。两种写法的编号个数不同(两个对一个),这正是选择环境的判断依据:推导步骤是否需要逐步引用。矩阵与分段函数见「矩阵与分段函数」一章,定理排版见「定理环境」一章;公式批量检查与编号提取可配合本站正则表达式。

六、环境选择决策表

把全文的环境选择逻辑压缩成一张决策表,写作时按顺序自问即可:

自问 若是 若否
只有一行? 单行编号环境 继续往下
是一个公式拆开? 拆行环境包编号环境 继续往下
需要等号对齐? 对齐环境 罗列环境
有分情况? 分段函数环境 用前面的结果

这张表配合本文开头的环境总览,覆盖了论文中九成的多行公式场景。剩下的一成属于特殊结构(如方程组加自己括号、公式内嵌表格),用到时查官方文档即可,不必提前学习——宏包设计的原则正是「常用结构简单写,罕见结构总是能写」。若你把决策表存进知识库随手翻,一周后它就会内化成下意识的选择,写作也就不再因查文档而频繁中断了——这正是「环境选型」这道坎跨越的时刻。

延伸阅读