自定义命令中存在 \\ 问题

自定义命令中存在 \\ 问题

因此,我尝试制定自己的命令,让矩阵变得不那么痛苦

我当前的命令是:

\newcommand{\mat}[2]{
\left(\begin{array}{#1}{#2}\end{array}\right)}

目的是将其用作:

\mat{cc}{1&0\\0&1}

生产同样的东西

\left(
\begin{array}{cc}
1 & 0 \\
0 & 1
\end{array}\right)

但是我不断收到消息“缺少}插入。”我认为它不喜欢命令参数中的\\。

有什么建议么?

编辑:已修复。从宏中删除了括号组

答案1

删除定义中的虚假括号:

\documentclass{article}
\newcommand{\mat}[2]{
  \left(
  \begin{array}{#1}
    #2
  \end{array}
  \right)
}
\begin{document}
\[ \mat{c}{2\\3} \]
\end{document}

为什么这是必要的?

括号组是 TeX 中一种特殊的东西(查看 TeX by Topic 了解详细信息;texdoc texbytopic在终端中运行)。当你将某个东西放入括号组中时,你要求 TeX 将其作为一个单元来处理。问题是,里面array有很多东西需要作为单独的单元来处理,比如行。(真实的原因实际上与“垂直模式”和“水平模式”等有关,但上述解释也适用于许多其他事物。)

答案2

正如我在评论中提到的那样,该tabstackengine包已经做到了这一点。第一种形式给出了带有堆栈的括号,但所有列必须具有相同的对齐方式。第二种形式需要单独添加括号,但允许每列有自己的对齐方式。

下面的例子并不漂亮,但仅仅是为了演示这些对齐变化。

\documentclass{article}
\usepackage{tabstackengine}
\parskip 1ex
\begin{document}
\setstacktabbedgap{1ex}
$\parenMatrixstack[r]{1 & 23 \\34 & 1}$\par
\setstacktabulargap{1ex}
$\left(\tabularCenterstack{lc}{1 & 23 \\34 & 1} \right)$
\end{document} 

在此处输入图片描述

相关内容