1. 期望结果
我经常发现自己试图将方程块的某些部分与其他部分独立对齐。例如,这是一个左对齐的方程块,其中一些方程跨越多行,并且它们的项与其他方程独立对齐。我在这里使用单词作为占位符,但这些实际上是数学表达式:
lorem + ipsum
= (dolor +sit +amet
consectetur -adipiscing -elit)
= (sed -do
siusmod +tempor)
2. 单对齐环境
这样做aligned
会添加不必要的额外空白,因为它会在所有三个方程之间共享列。例如,第二项直到第一个方程的末尾才开始。类似地,第三个方程中的第二项被推到右边,以上面方程中较长的第二项开头:
\begin{gather}
\begin{aligned}
&\text{lorem} + \text{ipsum} \\
= (&\text{dolor} &&+\text{sit} &&+\text{amet} \\
&\text{consectetur} &&-\text{adipiscing} &&-\text{elit}) \\
= (&\text{sed} &&-\text{do} \\
&\text{siusmod} &&+\text{tempor}).
\end{aligned}
\end{gather}
3. 嵌套对齐环境
我也尝试过嵌套aligned
环境。但这并不能给出正确的结果,因为内部环境的= (
和外部是垂直居中的,而它们应该分别位于顶部和底部:)
aligned
\begin{gather}
\begin{aligned}
&\text{lorem} + \text{ipsum} \\
= (&\begin{aligned}
&\text{dolor} &&+\text{sit} &&+\text{amet} \\
&\text{consectetur} &&-\text{adipiscing} &&-\text{elit}
\end{aligned}) \\
= (&\begin{aligned}
&\text{sed} &&-\text{do} \\
&\text{siusmod} &&+\text{tempor}
\end{aligned}).
\end{aligned}
\end{gather}
4. 内部前缀和后缀
=(
将“和”移动)
到内部align
环境内会破坏对齐所有五行的第一列。通常,前缀和后缀对于所有方程式来说宽度都不一样,因此我无法通过简单地将第一个方程式缩进更多来解决这个问题:
\begin{gather}
\begin{aligned}
& \text{lorem} + \text{ipsum} \\
&\begin{aligned}
=( & \text{dolor} &&+\text{sit} &&+\text{amet} \\
& \text{consectetur} &&-\text{adipiscing} &&-\text{elit})
\end{aligned} \\
&\begin{aligned}
= (& \text{sed} &&-\text{do} \\
& \text{siusmod} &&+\text{tempor}).
\end{aligned}
\end{aligned}
\end{gather}
5. 解决方案的想法
理想情况下,我可以使用多组锚点。例如,&1
对于左对齐所有行的第一列、&2
对于第二个方程中的两个附加列以及&3
对于第三个方程中的一列附加列:
\begin{gather}
\begin{multi_anchor_aligned} % Does not exist.
&1 \text{lorem} + \text{ipsum} \\
= (&1 \text{dolor} &2&2+\text{sit} &2&2+\text{amet} \\
&1 \text{consectetur} &2&2-\text{adipiscing} &2&2-\text{elit}) \\
= (&1 \text{sed} &3&3-\text{do} \\
&1 \text{siusmod} &3&3+\text{tempor}).
\end{multi_anchor_aligned}
\end{gather}
我有两个问题:
- 有没有更好的方法来实现这一点,使用现有的功能
amsmath
或其他常用包?我发布了一个类似问题针对先前更具体的情况,但它并不推广到这里的例子。 - 我怎样才能实现一个支持上述多种锚点类型的环境?我认为我必须解析
&
和\\
分隔符以迭代中间的术语并将它们放入多个数组中。
答案1
你想要的就是这样的东西吗?我曾经alignedat
完全控制列间距,并且可以选择[t]
放置左括号,并在最后一行的末尾添加闭括号:
\documentclass{article}
\usepackage{amsmath, amssymb}
\begin{document}
\begin{gather}
\begin{aligned}
&\text{lorem} + \text{ipsum} \\
= (&\begin{alignedat}[t]{3}
&\text{dolor} &&+\text{sit} &&+\text{amet} \\
&\text{consectetur} &&-\text{adipiscing} &&-\text{elit})
\end{alignedat} \\
= (&\begin{alignedat}[t]{2}
&\text{sed} &&-\text{do} \\
&\text{siusmod} &&+\text{tempor}).
\end{alignedat}
\end{aligned}
\end{gather}
\end{document}
答案2
这是一个数组解决方案,以及一个包含方程编号的表格*解决方案。
请注意,\extracolsep
不适用于第一列之前或最后一列之后。
\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\newcommand{\mytag}{\refstepcounter{equation}\llap{(\theequation)}}
\begin{document}
\begin{equation}
\begin{array}{rlll}
& \text{lorem} + \text{ipsum} \\
= (& \text{dolor} &+\text{sit} &+\text{amet} \\
& \text{consectetur} &-\text{adipiscing} &-\text{elit}) \\
= (& \text{sed} &-\text{do} \\
& \text{siusmod} &+\text{tempor}).
\end{array}
\end{equation}
\noindent\begin{tabular*}{\textwidth}{@{}l% left margin, leave empty
@{\extracolsep{\fill}}>{$\displaystyle}r<{$}
@{\extracolsep{0pt}\hspace{2\tabcolsep}}>{$\displaystyle}l<{$}
>{$\displaystyle}l<{$}
>{$\displaystyle}l<{$}
@{\extracolsep{\fill}}r@{}}
& & \text{lorem} + \text{ipsum} \\
&= (& \text{dolor} &+\text{sit} &+\text{amet} \\
& & \text{consectetur} &-\text{adipiscing} &-\text{elit}) &\mytag \\
&= (& \text{sed} &-\text{do} \\
& & \text{siusmod} &+\text{tempor}). &&\mytag
\end{tabular*}
\end{document}