如果一个人只是读这个问题,人们很容易就能理解,这不是重复的。
之前在这问题,询问如何排版列向量。有两个答案,
- 第一个使用这样的语法:
\colvec{1}{2}{3}
- 第二个是这样的:
\colvec{1;2;3}
现在我喜欢第二个,因为它看起来更短更简洁。关于这一点,另一位用户问如何排版行向量。该问题的答案的语法与第一个项目符号类似。我需要一些帮助来转换使用分号变成行向量函数,(原始函数如下所示):
\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}
答案1
这是一个可能的解决方案。根据这篇文章的评论,它可能会在负数上产生一些奇怪的错误。
我只是\@arraycr
用 来替换\hspace{\arraycolsep}
。
\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\hspace{\arraycolsep}\fi% %% here is the setup
{#1}%
\expandafter\xvekSp@lten
\fi}
\makeatother
有些用户评论说负号可能存在问题,可能会被解释为二元运算符而不是一元运算符。但我的样本没有出现这种情况。
答案2
我看不出直接输入行向量有什么问题,即,没有先将它们隐藏在新环境中:
\documentclass{article}
\newcommand{\?}{\mkern12mu} % extra-wide horizontal skip in mathmode
\begin{document}
$ \mathbf{x}_{1\times n} = (x_1\? x_2\? \dots\? x_n) $
$ (1\? {-2}\? {-3}\? 4) $
\end{document}
请注意,如果行向量包含负数,则应将其括在花括号中,以便 TeX 不会错误地将符号解释-
为二元运算符。显然,-
在这种情况下,符号应排版为一元运算符。