很抱歉问这样一个基本的问题,但我在搜索中没有找到令人满意的答案(如果确实有的话)。
我有以下 MWE
\documentclass{article}
\usepackage{amsmath}
\begin{document}
Where \texttt{aligned} fails me
\fbox{
\begin{minipage}[t]{0.22\textwidth}
\[\begin{aligned}
A+B &= C + D\\
&= C \\
&= C + E+F \\
&= C \\
\end{aligned}\]
\end{minipage}}
\vskip 1cm
Desired output \fbox{
\begin{minipage}[t]{0.22\textwidth}
\[\begin{aligned}
&A+B = C + D\\
&\hskip 0.3cm = C \\ % The equal sign is again aligned
&\hskip 0.3cm = C + E+F \\ % Should be right aligned
&\hskip 0.3cm = G \\ % The equal sign is again aligned
\end{aligned}\]
\end{minipage}}
\end{document}
换句话说,如果有空格,我通常希望等号对齐。如果没有空格(如上例所示),那么我想选择一行(在本例中是最长的一行= C+E+F
)并使其右对齐,然后使所有等号与右对齐行上的等号对齐。
在我上面的“解决方案”中,我不得不诉诸指定hskip
来实现这个结果,但我想知道是否有办法自动完成此操作而无需我猜测正确的间距。
答案1
不是全自动的:但节省了您估计所需偏移的时间:使用两层align
。
Using \texttt{align}\fbox{
\begin{minipage}[t]{0.22\textwidth}
\begin{align*}
A+B = C + D\\
\begin{aligned}
&= C \\ % The equal sign is again aligned
&= C + E+F \\ % Should be right aligned
&= G \\ % The equal sign is again aligned
\end{aligned}\end{align*}
\end{minipage}}
(外部align
没有&
符号,因此将两行都设置为右对齐。这意味着第一行的末尾与内部最长行的末尾匹配aligned
。内部在符号aligned
前没有任何项&
,因此将其中的所有内容设置为左对齐。)
答案2
自动执行?嗯,这需要相当复杂的代码,你应该:
- 测量等号处的“&”符号的宽度,
- 计算可用空间和方程组宽度之间的差异,
- 如果差值为负,则将其转换为第一个方程之后的方程的偏移量(从左边界开始)。
- 写出方程组的替代形式。在这里使用
mathtools
包及其宏很方便\MoveEqLeft[<offset>]
,其中<offset>
以单位给出em
(见下面的示例)。
因此,我仅描述算法,说明如何实现这一点。并展示一种更简单的手动实现方法:
em
在第一次编译时估计右侧最大方程突出部分的尺寸(以 为单位)。<offset>
然后根据您的估计在 \MoveEqLeft` 中设置。- 第二次编译应给出期望的结果。如果没有,则相应地更正 od 大小
<offset>
并重复编译。
例如:
\documentclass{article}
\usepackage{mathtools}
\begin{document}
Desired output
\fbox{
\begin{minipage}[t]{0.22\textwidth}
\[\begin{aligned}
\MoveEqLeft[1.5]
A + B = C + D \\
& = C \\
& = C + E + F \\
& = G
\end{aligned}
\]
\end{minipage}
}
\end{document}