跨多个数组/向量对齐

跨多个数组/向量对齐

我想对齐多个向量(水平数组),每个向量在单独的一行上。具体来说,有些值为负数,有些值为正数,有些有小数部分,有些没有。我想将所有内容(即所有数组的第一个值等)对齐到小数位,如下所示:

 ab=[-0.1  3    2.4]  
xyz=[ 3   -2.7 -2  ]  

我几乎用一个大矩阵实现了这一点,每行包含一个向量。小数点对齐最初是手动的,将每个数字分解为整数和小数部分,并将每个部分放在单独的列中,但后来我发现 dcolumn 包使它变得容易得多。

但是,由于我使用了一个大数组来确保多行水平对齐,因此我不能将 \left[ 部分放在一列,将 \right] 部分放在另一列。结果是括号只能通过 '[' 和 ']' 输入,而且有点小,而不是自动放大。

我想知道是否有其他方法可以在不使用一个大矩阵的情况下强制多个数组(如果需要,在同一个“对齐”块内)进行相同的水平对齐。也许有某种方法可以嵌套矩阵?

我考虑过对每个向量使用 tabular 或 tabularx,并对所有向量设置相同的列宽。虽然这会使向量的开始和结束对齐,但我 99% 肯定每列的值不会对齐。

否则,让“\left[...\right]”块跨越数组的多个列的某种方式将会很有用。

提前致谢

答案1

您可以嵌套array环境并使用包来实现小数点对齐。举个小例子:

\documentclass{article}
\usepackage{dcolumn}

\newcolumntype{R}{D{.}{.}{2,2}}

\begin{document}
\fontsize{16}{20}\selectfont
\[
\begin{array}{l@{}l@{}l}
  \begin{array}{r}
    ab=[ \\
    xyz=[
  \end{array}
  &
  \begin{array}{@{}RRR@{}}
    -2.3 & 4 & 3.56\\
    5 & -3.5 & -0.5
  \end{array}
  &
  \begin{array}{l}
    ] \\ ]
  \end{array}
\end{array}
\]

\end{document}

答案2

您可以手动\phantoms或通过制作具有特定宽度的表格来完成

\documentclass{article}
\usepackage{mathtools,dcolumn}
\newcommand\p[1]{\phantom{#1}}
\newcommand\dnum[1]{%
    \begin{tabular}{@{}D{.}{.}{3.1}@{}}
      #1
    \end{tabular}}

\begin{document}

Do it by hand
\begin{align}
  x   &= \begin{bmatrix*}[r]     -0.1         & \p{-}3\p{.7} & \p{-}2.4\end{bmatrix*}\\
  xyz &= \begin{bmatrix*}[r] \p{-}3\p{.1} &     -2.7     &     -2\p{.4}\end{bmatrix*}
\end{align}
or inside a tabular
\begin{align}
  x   &= \begin{bmatrix*}[r] \dnum{-0.1} & \dnum{3}     & \dnum{2.4}\end{bmatrix*}\\
  xyz &= \begin{bmatrix*}[r] \dnum{3}    & \dnum{-2.7}  & \dnum{-2} \end{bmatrix*}
\end{align}

\end{document}

相关内容