我想在以下代码中获得非标准对齐:
\begin{align}
\text{First left hand side} & = \text{First right hand side} \\
\text{Second left hand side} & = \text{Second right hand side} \\
& = \text{Loooooooooooooooooooooooooooooooong expanded right hand side}
\end{align}
最后一行应该不是与前两行对齐。我知道我可以拆分最后一行以形成多个右侧,但我宁愿避免这样做,因为在我的例子中它会填充四个方程式。
我发现了一个通过嵌套对齐和收集来实现这一点的邪恶方法:
\begin{gather}
\begin{align}
\text{First left hand side} & = \text{First right hand side} \\ %% \label{} does not work here
\text{Second left hand side} & = \text{Second right hand side}
\end{align}\\
= \text{Loooooooooooooooooooooooooooooooong expanded right hand side} \label{eq3}
\end{gather}
但遗憾的是,虽然这给出了我想要的视觉输出,但我不能使用标签来引用对齐内的方程式。
由于间距问题,我也不想将其放置&
在第三行的中间某处,因为这是一种脆弱的做法。
那么我该如何输入
- 第一行和第二行对齐于
=
- 第三行与前两行不对齐(最好向右对齐)
- 所有三行均已编号,可供参考
- 所有三条线都在一个方程组中(就语义和间距而言)?
答案1
有点低级的技巧:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align}
\text{First left hand side} & = \text{First right hand side} \\
\text{Second left hand side} & = \text{Second right hand side} \\
\omit \span = \text{Loooooooooooooooooooooooooooooooong expanded right hand side}
\end{align}
\end{document}
上面的左对齐了最后一行。如果希望最后一行右对齐,请使用(注意表达式的顺序和\omit\span
已更改)
\begin{align}
\text{First left hand side} & = \text{First right hand side} \\
\text{Second left hand side} & = \text{Second right hand side} \\
= \text{ expanded right hand side} \span \omit
\end{align}
这使
答案2
这可能是你需要的技巧:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\makeatletter
\newcommand{\unalign}[1]{%
\ifmeasuring@ \else
\makebox[\ifcase 1\maxcolumn@widths \fi][l]{$\displaystyle#1$}
\fi
}
\makeatother
\begin{align}
\text{First left hand side} & = \text{First right hand side} \\
\text{Second left hand side} & = \text{Second right hand side} \\
\unalign{= \text{Long expanded right hand side}}
\end{align}
\end{document}
测量时忽略了的参数\unalign
,然后将其排版在一个与其他方程式左侧一样宽的框中。当然,如果参数很长,这并不完全安全,但对于一次性情况来说,这可能就足够了。
如果希望未对齐的线与最宽的右侧齐平,请将定义更改为
\documentclass{amsart}
\begin{document}
\makeatletter
\newcommand{\unalign}[1]{%
\ifmeasuring@ \else
&\makebox[\ifcase2\maxcolumn@widths \fi][r]{$\displaystyle#1$}
\fi
}
\makeatother
\begin{align}
\text{First left hand side} & = \text{First right hand side} \\
\text{Second left hand side} & = \text{Second right hand side} \\
\unalign{= \text{Long expanded right hand side}}
\end{align}
\end{document}
答案3
接受另一个答案后回答我的问题可能不是好习惯,但我还有两个解决方案。
align
第一个解决方案(来自 Ulrich Diez)使 within内的标签起作用gather
:
\makeatletter
\newcommand*\savedf{\@bsphack\global\let\sdf\df@label\@esphack}
\newcommand*\restoredf{\@bsphack\global\let\df@label\sdf\@esphack}
\newcommand*\mylabel{\restoredf\label}
\makeatother
...
\begin{gather}
\savedf
\begin{align}
\text{First left hand side} & = \text{First right hand side}
\mylabel{eq:e1} \\
\text{Second left hand side} & = \text{Second right hand side}
\mylabel{eq:e2}
\end{align} \restoredf \\
= \text{Loooooooooooooooooooooooooooooooong expanded right hand side}
\notag \\
= \text{Another line} \label{eq:e3}
\end{gather}
\eqref{eq:e1},\eqref{eq:e2},\eqref{eq:e3}
虽然有点黑客行为,但是却很有效,并且提供了与其他解决方案不同的布局。
第二种解决方案使用该mathtools
包及其\MoveEqLeft
命令:
\usepackage{mathtools}
...
\begin{align}
\text{First left hand side} & = \text{First right hand side} \\
\text{Second left hand side} & = \text{Second right hand side} \\
\MoveEqLeft[9] = \text{Loooooooooooooooooooooooooooooooong expanded right hand side}
\end{align}
这看起来最优雅,但需要手动调整移位空间,这里9em
。该\MoveEqLeft
命令设置一个对齐点,然后将剩余材料em
向左移动指定量的。即使使用负数,即向右移动,也可以工作。
答案4
有点仓促和粗暴,但是
\begin{align}
\text{First left hand side} & = \text{First right hand side} \\
\text{Second left hand side} & = \text{Second right hand side} \\
= \text{Loooooooooooooooooooo}&\text{oooooooooooong expanded right hand side}
\end{align}