使用 amsmath 的 alignat 环境,让对应项在连续的化简步骤中共享对齐列。本指南将展示如何在 Mac 上的 LaTeX 文档中构建这种布局,包括某一项消失的步骤。

选择推导所需的对齐方式

首先确定读者应当纵向追踪什么:等号、对应项的起始位置,还是各个运算符。这些是不同的布局选择。对于下面的示例,目标是在化简表达式时,让二次项、一次项和常数项分别保持在三个固定位置。

LaTeX 项目建议读者参考 amsmath 宏包用户指南,了解数学排版。该指南记录的环境提供以下选择。LaTeX 核心文档,amsmath 用户指南,第 3.3–3.7 节。

期望的布局 环境 使用位置
在等号处对齐简单的等式链 align 或 align* 直接放在文档正文中
使用明确间距对齐多个对应项组 alignat 或 alignat* 直接放在文档正文中
将按项对齐的推导放在一个公式编号下 alignedat 放在 equation 内 放在外层数学环境内
在一个对齐位置拆分单个公式 split 放在 equation 内 放在外层显示环境内
拆分长公式,但不对齐对应项 multline 直接放在文档正文中

对于本任务,从 alignat* 开始。它的成对列让你可以控制各组之间的间距。相比之下,align 会在不同公式组之间提供间距,这可能让逐项推导显得过于松散。星号会取消公式编号。amsmath 用户指南,第 3.6 节,学习 LaTeX:数学公式。

构建完整的按项对齐化简过程

下面这个合成示例先合并 x 的同次幂项,再简写它们的系数。所有字母都表示普通的可交换标量。定义 A=a+b、B=c+d 和 C=e+f;最后一行是在合并之后改变记号。

将此完整文档保存为 term-alignment.tex。所需宏包须在 \begin{document} 之前加载。

\documentclass{article}
\usepackage{amsmath}

\begin{document}
Let $A=a+b$, $B=c+d$, and $C=e+f$.
Then
\begin{alignat*}{3}
P(x)&=a x^2+b x^2 &&{}+c x+d x &&{}+e+f\\
    &=(a+b)x^2   &&{}+(c+d)x  &&{}+e+f\\
    &=A x^2      &&{}+B x     &&{}+C
\end{alignat*}
\end{document}

将布局理解为三个纵向组。第一组包含等号和二次项。第二组以一次项前的加号开头。第三组以常数项前的加号开头。合并系数会改变各组的宽度,但每行中选定的对齐位置仍然相同。

这是对文档所述列机制的应用,而不是自动识别相匹配的代数项。你需要将每个表达式分配到预定列中;对齐环境会排布这些列。该实现交替使用右对齐和左对齐字段。amsmath 宏包,第 17 节。

编辑前先理解与号

在 alignat* 中,参数 {3} 声明三对列。因此,字段完整的一行有六个字段和五个 & 分隔符。手册中的计数规则是:取某行中 & 的最大数量,加一后再除以二。amsmath 用户指南,第 3.6 节。

第一行的字段分配如下:

字段 内容 在本例中的用途
1 P(x) 右对齐的左侧表达式
2 =a x^2+b x^2 左对齐的等号和二次项组
3 空 未使用的右对齐字段
4 {}+c x+d x 左对齐的一次项组
5 空 未使用的右对齐字段
6 {}+e+f 左对齐的常数项组

&& 序列会将字段 3 和 5 留空。在后续行中,开头的 & 会将字段 1 留空,让推导可以从另一个等号继续。\\ 命令用于结束一行。

{}+ 中的空组为在字段边界处留出二元加号的间距提供了左操作数;它不会输出任何字符。调整这些示例时,请保留这种写法。宏包的对齐前导部分也会在左对齐字段开头使用空组。amsmath 宏包,对齐前导部分。

普通源码中的空格能让代码更易读,但在数学模式中不会确定水平位置。对齐由字段结构决定。学习 LaTeX:数学公式。

在 Mac 上编译示例

编译前需要安装可用的 TeX 发行版。TeXShop 安装文档介绍了 MacTeX 和 BasicTeX 的安装,并指出 /Library/TeX/texbin 是共享位置,应用程序可通过它找到当前发行版的程序。TeXShop:安装 TeX Live。

若要直接编译,请将文件以纯文本格式保存到桌面,打开 Terminal,并按顺序运行以下两条命令:

cd "$HOME/Desktop"
/Library/TeX/texbin/pdflatex -interaction=nonstopmode -halt-on-error term-alignment.tex

打开生成的 term-alignment.pdf,检查这三个项组。此处假设你的桌面位于 $HOME/Desktop,且文件名与所示名称完全一致。如果编译中止,请先解决报告的错误,再检查 PDF;较早编译成功时生成的 PDF 可能仍然存在。

当某项消失时保留列位置

出现抵消时,固定布局尤其有用。假设一次项的系数为 c-c。你可能希望最终的常数仍然位于前面常数的正下方,同时一次项位置保持空白。

下面的完整文档始终保留相同的六字段结构。中间行明确显示零系数;最后一行移除了该项,但没有将常数移到它的位置。

\documentclass{article}
\usepackage{amsmath}

\begin{document}
Cancelling the linear coefficient gives
\begin{equation}
\begin{alignedat}{3}
Q(x)&=(a+b)x^2 &&{}+(c-c)x &&{}+d\\
    &=(a+b)x^2 &&{}+0x    &&{}+d\\
    &=(a+b)x^2 &&         &&{}+d
\end{alignedat}
\end{equation}
\end{document}

在最后一行中,二次表达式后面的两个 && 序列都要保留。它们会保留中间的空字段。删除其中一个序列会将常数放入较前面的组中,从而改变纵向排列所表达的含义。

本例还演示了给整个推导添加一个编号的受支持方法:将 alignedat 放在 equation 内。内部环境占据其内容的自然宽度,并且需要一个外层数学环境。amsmath 用户指南,第 3.7 节。

在读者追踪抵消过程时,空位置很有用。若要在文档的其他位置单独呈现最终公式,请写紧凑表达式 (a+b)x^2+d。应根据当前显示内容的目的,决定是展示对应关系还是呈现最终结果。

排查间距和对齐问题

调整各处距离之前,先检查结构。以下步骤针对上面的两个布局示例。

  1. 确认已加载宏包。 在导言区保留 \usepackage{amsmath}。
  2. 检查外层环境。 在文档正文中直接使用 alignat*。在 equation 内或其他合适的数学环境中使用 alignedat。
  3. 统计分隔符。 每个示例行都有五个 & 字符,对应 {3}。新插入的行也要符合此模式。
  4. 检查分组归属。 如果只有一个项横向移动,请将它的字段位置与前一行对比。
  5. 检查数学内容。 符号、系数或指数的变化属于代数变化,即使各列仍然对齐。

对齐分隔符过多可能导致宏包报错:Extra & on this line。错误地将 align 这样的显示环境嵌套在 equation 内,也会触发公式结构错误;为此应使用 alignedat 这样的内部构件。amsmath 宏包,第 17 节。

如果某一列似乎过宽,请检查其中最长的表达式。在第一个示例中,a x^2+b x^2 的宽度大于 A x^2。这额外的宽度有助于呈现预期的对应关系。尝试压缩之前,先确认三个组是否仍然都需要独立的对齐位置。

还要准确判断哪里看起来没有对齐。这些示例对齐的是各项组的起始位置,包括前导加号。它们不会在各组内部单独对齐每个系数、变量和指数。如果读者只需要追踪连续的等式,使用单一对齐锚点的简单布局可能更易读。

添加说明而不重建推导

如果某个变换需要用句子说明,mathtools 会提供 \shortintertext,可在保留对齐点的同时,在对齐行之间插入文字。它会加载 amsmath,因此需要将导言区改为 \usepackage{mathtools}。mathtools 宏包,第 2 节和第 3.5 节。

例如,完成上述宏包更改后,下面这个带标签的片段可替换第一个完整文档中的对齐代码块:

\begin{alignat*}{3}
P(x)&=a x^2+b x^2 &&{}+c x+d x &&{}+e+f\\
\shortintertext{Collect coefficients of matching powers of $x$.}
    &=(a+b)x^2   &&{}+(c+d)x  &&{}+e+f
\end{alignat*}

用这句话说明读者应注意的运算。此处,共享列已经显示每一组所在的位置;插入的文字则解释了形式为何发生变化。

处理自己的推导时,先画出预期的项组,将每组分配给固定字段,并在抵消过程中保留这些字段。每添加一个新变换后都进行编译。这样可以有意安排各项之间的对应关系,也让你日后返回编辑时仍能看懂源码。

来源