因此,我尝试制定自己的命令,让矩阵变得不那么痛苦
我当前的命令是:
\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}