时隔近二十年后,我刚刚回归 Latex,但遇到了一些困难。在 {align*} 中,我有一个数字列表,这些数字需要垂直对齐小数点。以下代码片段说明了我的困难。我可以在表格环境中找到大量有关小数对齐的帮助,但似乎没有一个能解决我的问题。我目前通过插入额外的空格来解决这个问题,但我真的不想这样做。
\documentclass{article}
\usepackage[fleqn]{amsmath}
\begin{document}
\begin{align*}
y &= a_1 x + a_2x^2 + a_3 x^3\\
\text{where}\\
a_1 &= 1.23\\
a_2 &= -4.56\\
a_3 &= 78.90
\end{align*}
%failed attempt at aligning the decimal points
\begin{align*}
y &= a_1 x + a_2x^2 + a_3 x^3\\
\text{where}\\
a_1 &= 1&.23\\
a_2 &= -4&.56\\
a_3 &= 78&.90
\end{align*}
\end{document}
输出如下所示
答案1
不需要将主等式中的等号与底部块的等号对齐,因为它们是独立的。
\documentclass{article}
\usepackage[fleqn]{amsmath}
\usepackage{array,siunitx}
\begin{document}
\begin{equation*}
y = a_1 x + a_2x^2 + a_3 x^3
\end{equation*}
where
\begin{equation*}
\begin{array}{@{} r @{} >{{}}l<{{}} @{} S[table-format=-1.2] @{}}
a_1 &= & 1.23\\
a_2 &= & -4.56\\
a_3 &= & 78.90
\end{array}
\end{equation*}
\end{document}
S
如果所有条目的小数位数都相同且r
足够的话,该列实际上并不是必要的。
如果您喜欢较小的垂直空间,请使用gather*
和\shortintertext
:
\documentclass{article}
\usepackage[fleqn]{amsmath}
\usepackage{mathtools}
\usepackage{siunitx}
\begin{document}
\begin{gather*}
y = a_1 x + a_2x^2 + a_3 x^3
\shortintertext{where}
\begin{array}{@{} r @{} >{{}}l<{{}} @{} S[table-format=-1.2] @{}}
a_1 &= & 1.23\\
a_2 &= & -4.56\\
a_3 &= & 78.90
\end{array}
\end{gather*}
\end{document}
如果你坚持对齐:
\documentclass{article}
\usepackage[fleqn]{amsmath}
\usepackage{mathtools}
\usepackage{calc}
\begin{document}
\begin{align*}
y &= a_1 x + a_2x^2 + a_3 x^3
\shortintertext{where}
a_1 &=\makebox[\widthof{$-4.56$}][r]{$1.23$}\\
a_2 &=-4.56\\
a_3 &=\makebox[\widthof{$-4.56$}][r]{$78.90$}
\end{align*}
\end{document}
不过,我不会浪费这么多空间:
\documentclass{article}
\usepackage[fleqn]{amsmath}
\begin{document}
\begin{equation*}
y = a_1 x + a_2x^2 + a_3 x^3
\end{equation*}
where $a_1 = 1.23$, $a_2 = -4.56$ and $a_3 = 78.90$.
\end{document}
答案2
alignat*
这可能是一种可能性。\begin{alignat*}{2}
使得两rl
列对之间没有空格。
请注意,我使用了mathtools
。loadsamsmath
和mathtools
extends amsmath
,并提供\mathrlap
和等\shortintertext
,这里都使用了 。
\documentclass{article}
\usepackage[fleqn]{mathtools}
\begin{document}
\begin{alignat*}{2}
y &= \mathrlap{a_1 x + a_2x^2 + a_3 x^3}\\
\shortintertext{where}
a_1 &= & 1 & .23\\
a_2 &= & -4 & .56\\
a_3 &= & 78 & .90
\end{alignat*}
\end{document}
答案3
最终,您希望将条件设置在宽度相同的框中,并且所有框的内容都r
右对齐。这可以使用eqparbox
:
\documentclass{article}
\usepackage[fleqn]{mathtools}
\usepackage{eqparbox}
\begin{document}
\begin{align*}
y &= a_1 x + a_2x^2 + a_3 x^3 \\
\shortintertext{where}
a_1 &= \eqmakebox[cond][r]{$ 1.23$} \\
a_2 &= \eqmakebox[cond][r]{$-4.56$} \\
a_3 &= \eqmakebox[cond][r]{$78.90$}
\end{align*}
\end{document}
\eqmakebox[<tag>][<align>]{<stuff>}
设置<stuff>
具有特定 ment 的框<align>
。所有具有相同 ment 的框都将设置为该 范围内的<tag>
最大宽度。该过程涉及iliary 文件的使用,并且至少需要两次编译才能更改或。<stuff>
<tag>
.aux
<tag>
<stuff>
答案4
另一个更紧凑的变体:
\documentclass{article}
\usepackage[fleqn]{mathtools}
\begin{document}
\begin{gather*}
y =a_1 x + a_2x^2 + a_3 x^3\\[2pt]
\shortintertext{where\quad\smash{\rule[-6.2ex]{0.4pt}{7.5ex}}\enspace $ \begin{alignedat}[t]{2}
a_1 &= & 1 & .23\\
a_2 &= & -4 & .56\\
a_3 &= & 78 & .90
\end{alignedat}$}
\end{gather*}
\end{document}