条目对齐的向量列表

条目对齐的向量列表

我正在尝试生成如下格式的向量列表。

            a = (   1,   1,  25,   1,   5)               (1)
            b = (  50,   k,   1,   k,  80)               (2)
            c = (   0,  35, 1+k, 200,   1)               (3)

其重要特征包括:

  • 逗号对齐,并且每个向量条目都右对齐,因此很容易a[3]b[3]和进行比较c[3]
  • 向量条目可能是数字或符号,因此它们需要数学模式
  • 每个向量都有一个方程数右边,连续使用\begin{equation} ... \end{equation}来自 amsmath 的环境生成的数字。
  • 整体块居中在页面上。

我已尝试过:

\begin{align}
 a &= (  1, & 1, & 25, & 1, & 5) \\
 % ...
\end{align}

这会产生奇怪的对齐(就像 一样flalign)。

\begin{align}
\begin{matrix}
 a &= &( & 1, & 1, & 25, & 1, & 5 & ) \\
 % ...
\end{matrix}
\end{align}

这会产生或多或少正确的对齐(逗号不对齐,但括号对齐),但没有方程式编号。

答案1

这可以使用 来完成alignat,它与 类似,align只是列之间没有空格。我添加了一个\空格,但您可以使用\,\quad或任何其他空格。列交替左右对齐,因此要获得连续的右对齐列,请使用&&

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath}

\begin{document}

\begin{alignat}{6}
 a = (\ &&   1,\ &&  1,\ && 25,\ &&  1,\ &&  5\ ) \\
 b = (\ &&  50,\ &&  k,\ &&  1,\ &&  k,\ && 80\ ) \\
 c = (\ &&   0,\ && 35,\ && 1+k,\ && 200,\ &&  1\ )
\end{alignat}

\end{document}

答案2

您可以使用IEEEtrantools

\documentclass{article}
\usepackage{amsmath}
\usepackage{IEEEtrantools}

\begin{document}

\begin{IEEEeqnarray}{
  r % name
  C % equals
  .r % (
  .r.r.r.r.r % entries
  .r % )
}
a &= ( &  1, &  1, &  25, &   1, &  5 & ) \\
b &= ( & 50, &  k, &   1, &   k, & 80 & ) \\
c &= ( &  0, & 35, & 1+k, & 200, &  1 & )
\end{IEEEeqnarray}

\end{document}

在此处输入图片描述

然而,如果有多个这样的情况,这样的输入就会很麻烦。

\documentclass{article}
\usepackage{amsmath}
\usepackage{IEEEtrantools}

\ExplSyntaxOn

\NewDocumentEnvironment{vectorarray}{mb}
 {
  \max_vectorarray:nn { #1 } { #2 }
 }
 {}

\seq_new:N \l__max_vectorarray_items_seq
\seq_new:N \l__max_vectorarray_rows_seq

\cs_new_protected:Nn \max_vectorarray:nn
 {
  % #1 is the number of components
  % #2 is a list of items of the form {a}{1,2,3,4} separated by \\
  \seq_set_split:Nnn \l__max_vectorarray_items_seq { \\ } { #2 }
  \seq_clear:N \l__max_vectorarrat_rows_seq
  \seq_map_function:NN \l__max_vectorarray_items_seq \__max_vectorarray_item:n
  \exp_args:Nne \begin{IEEEeqnarray}{rC .r \prg_replicate:nn{#1}{.r} .r}
  \seq_use:Nn \l__max_vectorarray_rows_seq { \\ }
  \end{IEEEeqnarray}
 }

\cs_new_protected:Nn \__max_vectorarray_item:n
 {
  \__max_vectorarray_item_aux:nn #1
 }
\cs_new_protected:Nn \__max_vectorarray_item_aux:nn
 {
  \seq_put_right:Nx \l__max_vectorarray_rows_seq
   {
    #1 & = & ( & \clist_use:nn { #2 } { , & } & )
   }
 }

\ExplSyntaxOff

\begin{document}

\begin{IEEEeqnarray}{
  r % name
  C % equals
  .r % (
  .r.r.r.r.r % entries
  .r % )
}
a &= ( &  1, &  1, &  25, &   1, &  5 & ) \\
b &= ( & 50, &  k, &   1, &   k, & 80 & ) \\
c &= ( &  0, & 35, & 1+k, & 200, &  1 & )
\end{IEEEeqnarray}

\begin{vectorarray}{5}
{a}{1,1,25,1,5} \\
{b}{50,k,1,k,80} \\
{c}{0,35,1+k,200,1}
\end{vectorarray}


\end{document}

这样就可以避免指定矢量分量的数量。

在此处输入图片描述

相关内容