10 align和alignat环境的区别以及适用范围?

发布于 2024-10-27 16:01:40

我为我的好奇构造MWE...

in amsmath docs:
align环境介绍如下:

The align environment is used for two or more equations when vertical alignment is desired;

alignat环境介绍如下:

A variant environment alignat allows the horizontal space between equations to be explicitly specified. This environment takes one argument, the number of “equation columns” (the number of pairs of right-left aligned columns; the argument is the number of pairs): count the maximum number of &s in any row, add 1 and divide by 2.

群友提供了一个问题:

\documentclass{ctexart}
\usepackage{amsmath}
\begin{document}
使用\verb|align|环境(单锚点对齐需求)
\begin{align}
    2&x_1+4&x_2&=2\\
    4&x_1+11&x_2&=1
\end{align}
一种解决办法是使用\verb|alignat|环境(多锚点对齐需求)
\begin{alignat}{2}
    2&x_1+4&x_2&=2\\
    4&x_1+11&x_2&=1
\end{alignat}

我更想知道的是,在"所有"设计对齐的公式排版需求中, \verb|align|和\verb|alignat|适用范围的差别?

例如下例中, 雾月使用\verb|alignat|实现的, 使用\verb|align|能否可以(简便地)实现同样的效果。

\[
\left\{\begin{alignedat}{3}
% 这里的 {} 是为了保持+的间距,并不优雅
3\lambda     &x_{1} +{}&(2\lambda +1) &x_{2} +{}&(\lambda+1) x_{3} &=\lambda\\
(2\lambda+1) &x_{1} +{}&(2\lambda +1) &x_{2} +{}&(\lambda-2) x_{3} &=\lambda+1\\
(4\lambda-1) &x_{1} +{}&     3\lambda &x_{2} +{}&  2\lambda  x_{3} &=1
\end{alignedat}\right.
\]

另外一个比较复杂的需求是, 需要同步对齐变量, 如下效果. 使用哪一种方法可以\textbf{尽量减少}输入\verb|&|作为锚点的\textbf{次数}。

\begin{equation}
\left\{
    \begin{alignedat}{10}
        0.1&\pi_1 +{}& 0.3&\pi_2 +{} 0.1&\pi_3 & &  &  &{}= \pi_1 \\
        0.1&\pi_1 +{}& 0.2&\pi_2 +{} 0.2&\pi_3 &{}+ 0.1&\pi_4 +{} 0.1&\pi_5 &{}= \pi_2 \\
        0.3&\pi_1 +{}& 0.2&\pi_2 +{} 0.4&\pi_3 &{}+ 0.2&\pi_4 +{} 0.1&\pi_5 &{}= \pi_3 \\
        0.5&\pi_1 +{}& 0.2&\pi_2 +{} 0.2&\pi_3 &{}+ 0.4&\pi_4 +{} 0.4&\pi_5 &{}= \pi_4 \\
        &         & 0.1&\pi_2 +{} 0.1&\pi_3 &{}+ 0.1&\pi_4 +{} 0.4&\pi_5 &{}= \pi_5
    \end{alignedat}
\right.
\end{equation}

\end{document}

雾月大佬的一个回答采用了这种alignat的多锚点对齐方式,是否可以用align实现之。

image.png

查看更多

关注者
0
被浏览
271
啸行
啸行 2024-10-27
这家伙很懒,什么也没写!

align 和它的不带标号的版本 align* 可以排列多列对齐的公式,列与列之间用 & 分隔,而且在 & 左右的公式分别按照右对齐、左对齐的方式排列,所以很多人在用多个 & 时就从观感上容易产生很大的间距,相信这点你已经知道。在使用时,& 一般会放 = 的前面:

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
  x &= t & x &= \cos t & x &= t^2 \\
  y &= 2t & y &= \sin(t+1) & y &= e^t
\end{align*}
\end{document}

image.png

当然有时也可以放在二元运算符前面,只不过这时我通常会这么用(lshort-zh-cn 中也有类似的用法)

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
  (a+b)^2 ={}& a^2 + b^2\\
  & + 2ab
\end{align*}
\end{document}

image.png

alignat 及不带标号的 alignat* 则不在列与列之间产生间距,但可以手工增加间距。alignat 环境有一个参数,表示每行要对齐的公式个数,每两列一组,如下面把列间距设定为一个 \quad 的距离

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{alignat*}{2}
  x &= \sin t & \quad & t \ge 0 \\
  y &= \cos t &       & t < 0
\end{alignat*}
\end{document}

image.png

看第2行第3列我没用 \quad,但是间距依然保留下来,这是因为上一行的 \quad 位置必须在每一行都有所体现。它的这种特性就非常适合排版线性方程组

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{alignat*}{6}
  & x_1 & & + x_2 & & +x_3 & &+ x_4 & &+ x_5 & &=1 \\
  & x_1 & & & & +x_3 & & & & + x_5 & &=2 \\
  & & & \mathbin{\phantom{+}}x_2 & & & & +x_4 & & & &=3
\end{alignat*}
\end{document}

image.png
关于 \mathbin,可以参考 tex.stackexchange.com 的解释。\phantom 则是产生一个幻影。

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览