LaTeX 公式怎么换行?split、aligned、align 与 multline 的选择

博客EasyLaTeX发布于

LaTeX 公式换行需要支持多行的数学环境。在普通 equation 中加 \\,无法得到预期的多行排版。加载 amsmath 后,一条公式分行并共用一个编号,用 equation 加 split;多条公式分别编号,用 align;长公式不需要对齐点,用 multline。

这些写法适用于本地 TeX Live、MiKTeX 和 EasyLaTeX。下面使用 article 文档类与 pdfLaTeX,源码中保留英文说明,因此无需中文字体配置。已有中文论文或期刊模板应保留原文档类和编译引擎,只移入需要的公式片段。

先复制一个可编译的换行示例

新建 main.tex,放入下面的完整文档。示例把平方误差项与两个正则项分到两行,整条公式只编号一次。

LaTeX
\documentclass[a4paper,11pt]{article}\usepackage{amsmath}\begin{document}\begin{equation}\begin{split}J(w) &= \frac{1}{n}\sum_{i=1}^{n}(w x_i-y_i)^2 \\     &\quad + \lambda w^2 + \mu(w-w_0)^2.\end{split}\label{eq:objective}\end{equation}See Equation~\eqref{eq:objective}.\end{document}

这里约定 n 是正整数,w、w_0、x_i、y_i 是实数,lambda 与 mu 对应非负参数 \lambda、\mu。第二行接续第一行的加法,没有改变目标函数。& 标记对齐位置,\\ 分隔行;源码中的普通回车只便于阅读,不会让 PDF 里的公式换行。

按对齐与编号需求选择环境

示意图:先确认需要几个编号,再选择是否对齐。图中的横线表示公式内容。

需求推荐写法编号与嵌套
一条长公式,在指定位置对齐equation + split整体一个编号;split 本身不编号
可放进较大数学表达式的对齐块aligned放在数学模式内;由外层决定编号
多条式子或推导步骤分别编号align每行默认编号;独立使用
一条长公式,无共同对齐点multline整体一个编号;独立使用
所有行都不编号align*、multline*,或 \[...\] 内的 aligned按需要选择对齐方式

本例中 split 每行用一个 &。aligned 可以组织多组对齐列,也适合与外层括号组合;split 更适合占据整个显示公式的一条分行式。两者都不会自动替你挑选换行点。

split 与 aligned:同一条公式,共用一个编号

完整示例已经演示了 split。若需要把对齐块放入更大的表达式,可改用 aligned,同一目标函数的写法如下。后续片段都放在已有文档的正文内,不重复添加导言区。

LaTeX
\begin{equation}\begin{aligned}J(w) &= \frac{1}{n}\sum_{i=1}^{n}(w x_i-y_i)^2 \\     &\quad + \lambda w^2 + \mu(w-w_0)^2.\end{aligned}\label{eq:aligned}\end{equation}

aligned 本身没有编号。在 equation 内得到一个编号;在 \[...\] 内不编号。没有 aligned* 或 split* 的需求,应通过外层环境控制编号。

示意图:D(w) 表示数据误差项,R(w) 表示两个正则项之和;高亮的是源码中的对齐点与换行位置。

第二行的 \quad 增加缩进。续行以加号开头时,也可用 {}+ 保留二元运算符的间距,例如 &\quad {}+ ...。不要靠连续空格定位,TeX 会忽略大部分数学模式中的源码空格。

align:需要分别引用目标函数与导数

如果正文需要分别引用目标函数和梯度,可以把它们写成两行,各自编号。对 w 求导时,视 x_i、y_i、w_0、\lambda、\mu 为常量。

LaTeX
\begin{align}J(w) &= \frac{1}{n}\sum_{i=1}^{n}(w x_i-y_i)^2       + \lambda w^2 + \mu(w-w_0)^2       \label{eq:loss} \\J'(w) &= \frac{2}{n}\sum_{i=1}^{n}x_i(w x_i-y_i)        + 2\lambda w + 2\mu(w-w_0).        \label{eq:gradient}\end{align}

用 \eqref{eq:loss} 和 \eqref{eq:gradient} 引用对应行。这里两行是两个数学陈述,因此都有等号;不要在一条加法表达式的续行前补等号,否则会改变含义。

全部不编号时用 align*。只保留某一行编号时,在其余行结束前加 \notag:

LaTeX
\begin{align}(x+1)^2 &= x^2+2x+1 \notag \\        &= x(x+2)+1. \label{eq:expansion}\end{align}

标签放在保留编号的行。新标签出现 ?? 时,本地再运行一次 LaTeX,并检查标签是否重复;平台则等待当前编译任务完成后确认引用结果。

multline:长公式无需等号对齐

同一目标函数也可以用 multline 分行,不写 &:

LaTeX
\begin{multline}J(w) = \frac{1}{n}\sum_{i=1}^{n}(w x_i-y_i)^2 \\       + \lambda w^2 + \mu(w-w_0)^2.\label{eq:multline}\end{multline}

在这里的默认右侧编号设置下,第一行靠左、末行靠右,两端保留环境设定的间距,编号在末行右侧;若有中间行,默认居中。具体编号方向和显示位置会受到文档类及 amsmath 选项影响。取消编号用 multline*。它已经是独立显示环境,不要放进 equation 或 \[...\]。

换行失败时检查什么

现象或日志检查与修正
Environment align undefined检查主文件的导言区是否加载 amsmath;本地还要确认宏包已安装
在 equation 内加 \\,结果不换行加入 split 或 aligned,或改用独立的 align、multline
Erroneous nesting of equation structures检查是否把 align 嵌进了 equation
Misplaced alignment tab character &检查 & 是否写在支持对齐的环境中;multline 不使用它
Missing \right. 或括号相关错误检查 \left、\right 是否被跨行拆开
编译完成但公式仍超宽调整数学分组或换行点,查看日志中的 Overfull \hbox 并核对 PDF

例如,下面的独立显示环境嵌套不正确:

LaTeX
% Incorrect nesting\begin{equation}\begin{align}a &= b \\  &= c\end{align}\end{equation}

需要整体一个编号时,改成:

LaTeX
\begin{equation}\begin{split}a &= b \\  &= c\end{split}\end{equation}

\left( 与 \right) 不能跨越对齐环境的行边界配对。可按表达式大小选择固定尺寸的 \Bigl(、\Bigr):

LaTeX
\[\begin{aligned}F(x) &= \Bigl(a+b+c \\     &\qquad +d+e\Bigr).\end{aligned}\]

以上括号片段仅演示语法,a 到 e 是待相加的项。不要在数学环境内部插入空白段落;最后一行通常也无需额外的 \\。

双栏论文:先缩短表达式的每一行

双栏的可用宽度是一栏,单栏示例可能仍然放不下。可先定义数据项与正则项,使每行更短:

LaTeX
\begin{equation}\begin{split}J(w) &= D(w)+R(w), \\D(w) &= \frac{1}{n}\sum_{i=1}^{n}(w x_i-y_i)^2, \\R(w) &= \lambda w^2+\mu(w-w_0)^2.\end{split}\label{eq:compact}\end{equation}

这种写法保留了原目标函数。把它放进目标模板后重新检查列宽、编号与括号。优先按数学结构拆分,避免用 \resizebox 把整条公式缩成难读的小字;跨栏公式应遵守出版社模板要求。

在本地 LaTeX 和 EasyLaTeX 中验证

两种编译流程的操作示意。两条路径都需要检查当前 PDF 的边界和编号。

本地 TeX Live 或 MiKTeX

将完整示例保存为 main.tex,在该目录运行以下命令两次,以更新交叉引用。编辑器使用构建按钮时,也要确认根文件与编译器配置。

Shell
pdflatex -interaction=nonstopmode -halt-on-error main.tex

打开 main.log,先处理第一个错误,再检查溢出警告。查看新生成的 main.pdf,确认两行内容完整、只有一个编号、引用带括号且没有 ??。若本地与在线结果不同,比较文档类、引擎、宏包版本和列宽。

EasyLaTeX 中的主文件、编译与 Agent

在空白测试项目中创建 main.tex,通过顶部主文件下拉框选择它,在编辑器设置中选择 pdfLaTeX,然后编译。现有论文保留自己的主文件、引擎和模板,只替换公式块。编译器设置按项目中的用户保存,协作者也应各自确认。

等待当前任务完成,检查 PDF 预览中的换行点、对齐和编号。遇到错误,打开工具栏 Bug 面板查看 Original Log;AI Fix 可以发起 Agent 排错。也可在 Chat & Agent 中提出这样的具体要求:

将当前目标函数拆成两行,整体保留一个编号与原有标签。保留全部项、系数、括号和正负号,先确认主文件与已有宏包,仅修改相关公式块,编译后说明仍存在的错误或溢出。

核对 Agent 的源码修改与当前编译结果。旧 PDF 仍可见不代表最新编译成功;编号正确也不代表数学内容正确。逐项确认原式没有漏项,再下载 PDF 或 LaTeX 项目,便于提交或回到本地继续编辑。

继续阅读:多行公式与对齐、公式编号与引用、EasyLaTeX 入门、编译错误排查。

参考文档

LaTeX 公式换行:split、aligned、align、multline 教程 | EasyLaTeX