我正在尝试生成如下格式的向量列表。
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}
这样就可以避免指定矢量分量的数量。