排版列向量

排版列向量

我想定义一个排版列向量的命令。

对于一个向量,我可以有类似的东西:

\left(
\begin{array}{c}
a\\
b\\
\end{array}
\right)

我希望命令能够生成这样的向量,无论是 2 个还是 3 个参数。\colvec{a}{b}{c}应该生成与上面相同的向量,但多一个条目,其中\colvec{a}{b}将生成上面的向量。我该怎么做?我尝试过重载命令名称,但那是不可能的。

答案1

请注意,向量周围有额外的空间。您可能应该使用类似(pmatrix是包的一部分amsmath)的东西

\begin{pmatrix}a\\b\end{pmatrix}

标准 LaTeX\newcommand提供了一种拥有单个可选参数的方法。

\newcommand*\colvec[3][]{
    \begin{pmatrix}\ifx\relax#1\relax\else#1\\\fi#2\\#3\end{pmatrix}
}

\colvec[a]{b}{c}请注意,如果您想要三个元素或者两个元素,则必须使用\colvec{a}{b}

更新
根据您在评论中的请求,这里有一个根据第一个参数传递的数字获取任意数量元素的函数。

\newcount\colveccount
\newcommand*\colvec[1]{
        \global\colveccount#1
        \begin{pmatrix}
        \colvecnext
}
\def\colvecnext#1{
        #1
        \global\advance\colveccount-1
        \ifnum\colveccount>0
                \\
                \expandafter\colvecnext
        \else
                \end{pmatrix}
        \fi
}

您可以完全按照自己的需要使用它\colvec{5}{a}{b}{c}{d}{e}

答案2

这是一种更“TeX”的方法。行数是任意的。列默认右对齐,但也可以是 c 或 l:

\documentclass{article}

\makeatletter
\newcommand{\Spvek}[2][r]{%
  \gdef\@VORNE{1}
  \left(\hskip-\arraycolsep%
    \begin{array}{#1}\vekSp@lten{#2}\end{array}%
  \hskip-\arraycolsep\right)}

\def\vekSp@lten#1{\xvekSp@lten#1;vekL@stLine;}
\def\vekL@stLine{vekL@stLine}
\def\xvekSp@lten#1;{\def\temp{#1}%
  \ifx\temp\vekL@stLine
  \else
    \ifnum\@VORNE=1\gdef\@VORNE{0}
    \else\@arraycr\fi%
    #1%
    \expandafter\xvekSp@lten
  \fi}
\makeatother


\begin{document}
\[
\Spvek{1;-2} \quad \Spvek[l]{1;-2;3}\quad \Spvek[c]{1;-2;-3}\quad\Spvek{1;2;-3;4}
\]
\end{document}

输出将是:

在此处输入图片描述

答案3

我想补充一下 Peter B 上面关于 \Spvek 的解决方案。是的,这是一种更“TeX”的方法,但纯“TeX”方法只有两行:

\def\spvec#1{\left(\vcenter{\halign{\hfil$##$\hfil\cr \spvecA#1;;}}\right)}
\def\spvecA#1;{\if;#1;\else #1\cr \expandafter \spvecA \fi}

$\spvec{1;2;3} + \spvec{1;2;-3;4} + \spvec{1;2}$

该解决方案也适用于 LaTeX,因为这里只使用了 TeX 原语。

答案4

这是我的类似 KISS 的解决方案(它只是一个包装pmatrixamsmath灵感来自Garrys 的回答):

\newcommand{\myvec}[1]{\ensuremath{\begin{pmatrix}#1\end{pmatrix}}}

用法:

\myvec{x\\y\\z}

好处是,您不需要指定元素数量或其他任何内容。您只需使用 添加更多元素即可。与使用环境本身\\相比,它在 tex 文件中看起来也更整洁。pmatrix

您还可以将其用于行向量:

\myvec{a&b&c}

(为了完成:显然,矩阵也有效\myvec{a&b \\ c&d}:)

相关内容