我试图让方程式第二行中的某些部分与第一行中的某些部分对齐。例如,
X=AAA+BBB+CCC
= a + b + c
在这里,我希望小写字母排列在三个大写字母的中间,并且所有运算符都对齐。我尝试使用align
以下方式:
\begin{align}
X&=A&AA &+ B&BB &+ C&CC \\
&= &a &+ &b &+ &c
\end{align}
这会导致可怕的间距。我也尝试过使用tabular
,但那里的间距也很糟糕。我希望第一行能像正常那样书写,然后第二行能按需要对齐。
答案1
您可以使用alignat
来自amsmath 包。
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{alignat}{6}
X&={}& A&AA &{}+{}& B&B&B &{}+{}& C&C&C \\
&={}& &a &{}+{}& &b& &{}+{}& &c&
\end{alignat}
答案2
请注意,align
环境对每个组件都使用rcl
对齐。这就是为什么您的输出似乎聚集在“小方程式”中。
这里有几个选项,使用amsmath
或不:
\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\makeatletter
\newcommand{\cmathbox}[2][x]{%
\settowidth{\@tempdima}{$#1$}%
\makebox[\@tempdima][c]{$#2$}%
}
\makeatother
\begin{document}
Original using \verb|align*|:
\begin{align*}
X&=A&AA &+ B&BB &+ C&CC \\
&= &a &+ &b &+ &c
\end{align*}
Using \verb|alignat*|:
\begin{alignat*}{3}
X&=AAA &&+ BBB &&+ CCC \\
&=\cmathbox[AAA]{a} &&+ \cmathbox[BBB]{b} &&+ \cmathbox[CCC]{c}
\end{alignat*}
Using \verb|array|:
\[
\begin{array}{r@{{}\mathrel{=}{}}c*{2}{@{{}\mathbin{+}{}}c}}
X & AAA & BBB & CCC \\[\jot]
& a & b & c
\end{array}
\]
\end{document}
我的alignat
解决方案与@IanThompson 的略有不同。如果您不想水平居中表达式组件,他的解决方案会更通用。该解决方案通过运算符(关系和二进制)周围的正确间距以及表达式之间的垂直间距(使用which is )array
来模拟行为。\jot
3pt
答案3
我经常使用\makebox[<size>]{<new text>}
与 一样宽的盒子<size}
来放置<new text>
。
为了计算,<size>
我使用了\withdof{<old text>}
包calc
。默认情况下,这将使居中<new text>
,但您也可以指定[l]
左对齐、[r]
右对齐或[c]
居中对齐。在下面的第二个示例中,我将和左对齐a
,b
并将右对齐,c
以便于说明(并不是说这样看起来不错)。
\documentclass{article}
\usepackage{amsmath}
\usepackage{calc}
\begin{document}
\begin{align*}
X &= AAA + BBB + CCC \\
&= \makebox[\widthof{$AAA$}]{$a$}
+ \makebox[\widthof{$BBB$}]{$b$}
+ \makebox[\widthof{$CCC$}]{$c$}
\end{align*}
\begin{align*}
X &= AAA + BBB + CCC \\
&= \makebox[\widthof{$AAA$}][l]{$a$}
+ \makebox[\widthof{$BBB$}][l]{$b$}
+ \makebox[\widthof{$CCC$}][r]{$c$}
\end{align*}
\end{document}