公式环境中小数点的对齐

公式环境中小数点的对齐

时隔近二十年后,我刚刚回归 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。loadsamsmathmathtoolsextends 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} 

在此处输入图片描述

相关内容