我想简化编写向量的代码。例如,如果我写
\vector{1,2,3}
这相当于
\begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix}
相似地
\vector{1,2,3,4}
将会
\begin{bmatrix} 1 \\ 2 \\ 3 \\ 4 \end{bmatrix}
我如何为此类工作创建宏?
答案1
该stackengine
软件包已经支持这种构造\bracketVectorstack
,我按照 OP 要求的形式进行了捆绑。当然,它实际上并没有使用bmatrix
。
请注意,如果需要矩阵构造而不是向量,请查找tabstackengine
包提供的扩展。此外,可以使用例如来更改行间基线跳跃\setstackgap{L}{1.2\baselineskip}
。
\documentclass{article}
\usepackage{stackengine}
\newcommand\Vector[1]{\setstackEOL{,}\bracketVectorstack{#1}}
\begin{document}
\[
X = \Vector{1,2,3,4} \ne \Vector{1,x,3}
\]
\end{document}
答案2
expl3
使用语法和包装器命令(例如)可以非常轻松地进行拆分\feqvector
。此示例允许设置分隔符和矩阵的类型,例如b
或p
或任何其他允许的类型。
\documentclass{article}
\usepackage{mathtools}
\usepackage{xparse}
\ExplSyntaxOn
\clist_new:N \l_feq_vector_clist
\NewDocumentCommand{\feqvector}{O{\\}mO{b}}{
\clist_set:Nn \l_feq_vector_clist {#2} % Set the list
\begin{#3matrix}
\clist_use:Nn \l_feq_vector_clist {#1} % show it with separator from #1 (\\)
\end{#3matrix}
}
\ExplSyntaxOff
\begin{document}
A few: $\feqvector{1,2,3}$
More of them: $\feqvector{1,2,3,4,5}$
horizontal: $\feqvector[&]{1,2,3,4,5}$
Now with parenthesis and horizontal: $\feqvector[&]{1,2,3}[p]$
\end{document}
答案3
如果您可以接受稍微不同的语法(在第一种情况下多一个字符),那么有一个简单的解决方案:
\def\vector#1.{\begin{bmatrix} #1 \end{bmatrix}
使用
\vector 1\\2\\3.
或者\vector 1\\2\\3\\4.
当然,以点作为参数的结尾仅仅是一个例子。