使用可变数量的锚点对齐方程

使用可变数量的锚点对齐方程

我正在尝试对齐一些方程式,但我希望每行有可变数量的锚点。

\documentclass[]{article}
\usepackage{amsmath}
\begin{document}
\begin{alignat*}{2}
    a &= a',& \quad b &= b' \\
    c &= c',& \quad d &= d' \\
    e &= (e'_1 + \cdots + e'_n)(e''_1 + \cdots + e''_n)(e'''_1 + \cdots + e'''_n)
\end{alignat*}
\end{document}

前两行应该有两个锚点,对齐它们的=符号。最后一行要长得多,而且只有一个。我希望它与其他两行=最左边的锚点对齐。=

按照目前的书写方式,=前两行的第二个符号位于右侧很远的地方,位于整个底线之后。实际上,添加底线不会改变其他四个=符号的相对位置。它可能会改变它们在页面上的位置,因为整个符号应该居中。

我已经尝试过所有align/ed/at我能想到的方法,但都没有成功!\phantom{a}如果可以避免,我宁愿不使用诸如手动移动东西之类的东西。此外,诸如此类的东西\mathrlap没有太大用处,因为在进行集中化时没有考虑到它们。


说得更清楚一点,我希望整个显示都居中。这包括最后一行是最长的,所以它应该居中。我希望最左边的三个=符号对齐,右边的两个符号也对齐,即使a'和的c'长度不同——当然,在我的实际应用中,它们比和更a'复杂c'

精确的代码如下。

\documentclass[]{article}
\usepackage{amsmath}
\usepackage{mathtools}
\begin{document}
\begin{alignat*}{2}
    N_0 &\coloneqq L_0,& \quad N_k &\coloneqq L_{f(k+1)} / L_{f(k)} \\
    S_0 &\coloneqq 0,& \quad S_{k+1} &\coloneqq S_k + 2 d^2 L_{f(k)} T_{f(k)} N_k; \\
    C_k &\coloneqq \cap_{i \in \overline{\mathcal Q}(i_0; N_k), \: m \in [2 d^2 L_{f(k)} N_k]} \bigl( \mathcal P_{f(k),k}(i) \cap \mathcal G_{f(k),k}(i; S_k + (m-1) T_k) \bigr)
\end{alignat*}
\end{document}

答案1

这是一个使用IEEEeqnarray环境的解决方案IEEEtrantools包裹

在此处输入图片描述

\documentclass[]{article}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{IEEEtrantools}
\usepackage{showframe}

\begin{document}
\begin{IEEEeqnarray*}{rClrCl}
    a &=& a',& \quad b &=& b' \\
    c &=& c',& \quad d &=& d' \\
    e &=& \IEEEeqnarraymulticol{4}{l}{(e'_1 + \cdots + e'_n)(e''_1 + \cdots + e''_n)(e'''_1 + \cdots + e'''_n)}
\end{IEEEeqnarray*}

\begin{IEEEeqnarray*}{rClrCl}
    N_0 &\coloneqq& L_0,& \quad N_k &\coloneqq& L_{f(k+1)} / L_{f(k)} \\
    S_0 &\coloneqq& 0,  & \quad S_{k+1} &\coloneqq& S_k + 2 d^2 L_{f(k)} T_{f(k)} N_k; \\
    C_k &\coloneqq& \IEEEeqnarraymulticol{4}{l}{\cap_{i \in \overline{\mathcal Q}(i_0; N_k), \: m \in [2 d^2 L_{f(k)} N_k]} \bigl( \mathcal P_{f(k),k}(i) \cap \mathcal G_{f(k),k}(i; S_k + (m-1) T_k) \bigr)}
\end{IEEEeqnarray*}
\end{document}

答案2

欺骗!

\documentclass{article}
\usepackage{amsmath,mathtools}
\usepackage{showframe} % to show centering

\begin{document}

\begin{align*}
&\begin{alignedat}{2}
  \mathllap{N_0} &\coloneqq L_0, &\qquad\qquad N_k &\coloneqq L_{f(k+1)} / L_{f(k)} \\
  \mathllap{S_0} &\coloneqq 0,   &\qquad\qquad S_{k+1} &\coloneqq S_k + 2 d^2 L_{f(k)} T_{f(k)} N_k; \\
  \end{alignedat}
\\
C_k &\coloneqq \bigcap\nolimits_{i \in \overline{\mathcal Q}(i_0; N_k), \: 
  m \in [2 d^2 L_{f(k)} N_k]} \bigl( \mathcal P_{f(k),k}(i) \cap \mathcal G_{f(k),k}(i; S_k + (m-1) T_k) \bigr)
\end{align*}

\end{document}

我使用外部对齐,\coloneqq符号是对齐点;内部alignedat在第一列有零宽度条目,而最后一行恰好有最宽的项目。

在此处输入图片描述

答案3

好吧,这是作弊。我只是复制了@Zarko 的示例并做了我在评论中建议的调整。(然而,这个答案和我的评论都被作者删除了。

建议检查长度不均匀的行的对齐显示,确定最长行的哪部分“太长”,并将其作为\phantom下一行的插入(在辅助对齐内)。当然,这有点像 hack,但比尝试构建自定义环境要容易得多。

 \begin{document}
\thispagestyle{empty}
Text above the display.  Make it two lines so that the width of the text
block is obvious.  Make it two lines so that the width of the text
block is obvious.
\begin{alignat*}{2}
    a & = a',   &\qquad   b &= b' \\
    c & = c',   &\qquad   d &= d'
         \phantom{\quad (e''_1 + \cdots + e''_n)(e'''_1 + \cdots + e'''_n)}\\
    e & = \mathrlap{(e'_1 + \cdots + e'_n)(e''_1 + \cdots + e''_n)(e'''_1 + \cd\
ots + e'''_n)}
\end{alignat*}
Some more text directly following the display.

Let's do this again, without adding the \verb+\phantom+.
\begin{alignat*}{2}
    a & = a',   &\qquad   b &= b' \\
    c & = c',   &\qquad   d &= d' \\
    e & = \mathrlap{(e'_1 + \cdots + e'_n)(e''_1 + \cdots + e''_n)(e'''_1 + \cdots + e'''_n)}
\end{alignat*}
Some final text.
\end{document}

第二行之所以使用 ,\phantom是为了让显示屏的所有行都具有相同的宽度。通过比较第二个显示屏(也就是我们开始使用的显示屏)可以看到这样做的效果。

示例代码的输出

答案4

似乎没有一个简单的解决方案,这也许令人惊讶。@Imran 展示了如何正确地做到这一点,但是使用IEEE包,这有点不同。

Barbara 和 egreg 给出了一些近似值。两者的集中度都略有错误,但只有一点点,而且可以手动调整。所以,既然没有解决方案,我想我会尽我所能。这确实得到了精确的期望结果——包括正确的集中度——但每次都需要稍微改进。它基本上是手动进行水平对齐。

\documentclass[]{article}
\usepackage{amsmath}
\usepackage{mathtools}
\begin{document}
Without any spacing adjustment, the second $\coloneqq$ on the second row would be further to the right and on the first row. If it were the other way around, then the \verb|\mathrlap|/\verb|\phantom|/\verb|\mathllap| needs to be done on the second line.
\begin{align*}
    N_0 &\coloneqq \mathrlap{L_0,} \phantom{0, \quad S_{k+1}} \mathllap{N_k} \coloneqq L_{f(k+1)} / L_{f(k)} \\
    S_0 &\coloneqq 0, \quad S_{k+1} \coloneqq S_k + 2 d^2 L_{f(k)} T_{f(k)} N_k; \\
    C_k &\coloneqq \cap_{i \in \overline{\mathcal Q}(i_0; N_k), \: m \in [2 d^2 L_{f(k)} N_k]} \bigl( \mathcal P_{f(k),k}(i) \cap \mathcal G_{f(k),k}(i; S_k + (m-1) T_k) \bigr)
\end{align*}
\end{document}

在此处输入图片描述

相关内容