缩短恒定大小的行或列矩阵

缩短恒定大小的行或列矩阵

我多次使用只有一行或一列的矩阵。例如:

\begin{pmatrix}1 \\ 2 \\ 3 \end{pmatrix}
\begin{pmatrix}1 &  2 &  3 \end{pmatrix}

macro因此我认为用 a或 a来缩短表达式会很有用newcommand。到目前为止我失败了,但我不明白为什么。这是一个最小的例子:

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{mathtools}

\newcommand{\pmone}[1]{\begin{pmatrix}#1 \end{pmatrix}}
\newcommand{\pmtwo}[2]{\begin{pmatrix}#1 \\ #2\end{pmatrix}}
\newcommand{\pmTtwo}[2]{\begin{pmatrix}#1 & #2\end{pmatrix}}

\begin{document}
    $\pmtwo{1,2}$
\end{document}

我收到以下错误:! Missing $ inserted. <inserted text> $ l.12 $ \pmtwo{1,2}$

但是当我将其改为时,pmone{1}它按预期工作。这是为什么?

(我明白,除了定义 pmone、pmtwo 等之外,还有一种方法可以使其成为以数字作为参数的函数,但不必为此烦恼。我只会使用最多 5 个数字,所以没有必要。)

答案1

这是因为\pmtwo,使用大括号可以正确工作。您有两个数字[2],即和{#1}{#2}并且\pmtwo不需要逗号:因此$\pmtwo{1}{2}$

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\usepackage{amssymb}


%\newcommand{\pmone}[1]{\begin{pmatrix}#1 \end{pmatrix}}
\newcommand{\pmtwo}[2]{\begin{pmatrix}{#1} \\ {#2}\end{pmatrix}}
%\newcommand{\pmTtwo}[2]{\begin{pmatrix}#1 & #2\end{pmatrix}}

\begin{document}
    $\pmtwo{1}{2}$
\end{document}

在此处输入图片描述

答案2

您可以定义\pmrow{1,2,3}\pmcol{3,4,5,6}宏:

\documentclass[12pt]{article}
\usepackage{amsmath}

\long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
\def\pmrow#1{\def\tmpsep{&}\def\tmp{}\pmrowA #1,,}
\def\pmcol#1{\def\tmpsep{\\}\def\tmp{}\pmrowA #1,,}
\def\pmrowA#1,{\ifx,#1,\begin{pmatrix}\tmp\end{pmatrix}\else
   \ifx\tmp\empty\else\addto\tmp{\tmpsep}\fi\addto\tmp{#1}\expandafter\pmrowA\fi}

\begin{document}
    $\pmrow{1,2,3}$, $\pmcol{3,4,5,6}$
\end{document}

我添加了$\pmtwo{1,2}$OP 给出的不起作用的原因解释。\pmtwo定义为具有两个参数的宏#1#2并且它的用法$\pmtwo{1,2}$扫描1.2#1$#2,并且宏扩展为

\begin{pmatrix}1,2 \\ $\end{pmatrix}

我们$在原始模板中拥有第二个模板。此模板由(打开数学模式)\halign打开,然后关闭它,然后模板尝试通过第三个模板关闭数学模式(但它打开了新的数学模式)。然后结束模板出现在数学模式中。TeX 尝试通过在错误恢复期间插入第四个模板来关闭此数学模式。它说明了这种插入:。$$$$! Missing $ inserted

相关内容