具有内置数学模式的列向量和行向量

具有内置数学模式的列向量和行向量

有没有办法在这里做出解决方案

排版列向量

和这里

排版行向量

\ensuremath通过在它们的定义中包括哪些内容来发挥作用?

答案1

对于以不同的宏开始和结束的情况,只需将\ensuremathin 的定义拆分为两个即可。因此

\relax\ifmmode\let\myend\relax\else$\def\myend{$}\fi

在第一个宏定义的开始处

\myend

在第二个的末尾。

但是请注意,如果软件包作者遵循语法指南,那么像 LaTeX 这样的格式效果最好,这样整个语言或多或少会保持连贯一致。TeX 在数学模式和文本模式之间做出了很大的区分,这\.与例如不同\dot,用户需要知道他们是处于数学模式还是文本模式。有时对于一些小符号,用户可能不需要知道数学模式正在内部使用,这\ensuremath很有用,但对于像采用用户提供的参数的向量这样的东西,使用它通常不是一个好主意,因为用户在任何情况下都需要知道提供的参数被处理为数学。比较标准的 LaTeXarray环境,这与除了每个单元格都处于数学模式之外完全相同tabular,但是环境不会隐式地切换到数学模式,而是检查它是否已经处于数学模式,如果不是,则会出错。因此,用户需要在使用之前切换到数学array。此错误检查纯粹是为了保持语言一致性,array否则环境将以相同的方式在文本或数学中工作。类似的考虑适用于参数结构。LaTeX 命令绝不采用可变数量的{}参数。{}参数应为强制参数。可选参数应为[],可变数量的项目应以逗号分隔的列表形式列出,因此,与向量可以是任意长度相比,这种\colvec{a,b}语法与 latex 的兼容性要好得多。\colvec{a}{b}

答案2

我听取了 David Carlisle 的建议并在这里找到了一个使用逗号分隔的参数列表的解决方案。自定义命令的参数是否以逗号分隔列表?真的帮助了我。

\documentclass{article}
\usepackage{amsmath}

\makeatletter
\newcommand\rcvector[2][\\]{\ensuremath{%
  \global\def\rc@delim{#1}%
    \negthinspace\begin{pmatrix}
      \rc@vector #2,\relax\noexpand\@eolst%
    \end{pmatrix}}}
\def\rc@vector #1,#2\@eolst{%
  \ifx\relax#2\relax
    #1
  \else
    #1\rc@delim
    \rc@vector #2\@eolst%
  \fi}
\makeatother

\newcommand{\colvect}{\rcvector}
\newcommand{\rowvect}{\rcvector}

\begin{document}

\colvect{ct,x,y,z}\rowvect[,\;]{ct,x,y,z}

\end{document}

相关内容