排版行向量 - 第 2 卷

排版行向量 - 第 2 卷

如果一个人只是这个问题,人们很容易就能理解,这不是重复的。

之前在问题,询问如何排版列向量。有两个答案,

  • 第一个使用这样的语法:\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 不会错误地将符号解释-为二元运算符。显然,-在这种情况下,符号应排版为一元运算符。

相关内容