我尝试使用快捷方式设置具有不同括号的矩阵。我的解决方案在 displaymath 和 equation 环境中运行良好。但是,当我尝试在 align 中使用它时,就会出现错误。
是否有人知道一个解决方案,我可以在 align 中仍然使用我的定义?
\documentclass{scrreprt}
\usepackage{amsmath}
\newcommand{\Mtrx}[2][1]{
\ifx0#1
\begin{matrix} #2 \end{matrix}
\else\ifx1#1
\begin{bmatrix} #2 \end{bmatrix}
\else\ifx2#1
\begin{pmatrix} #2 \end{pmatrix}
\fi\fi\fi
}
\begin{document}
% everything as expected here:
\begin{equation}
\Mtrx[2]{A & B \\ C & D} = \Mtrx[1]{c\\d}
\end{equation}
% The following align-equation gives an error:
\begin{align}
\Mtrx[2]{A & B \\ C & D} &= 0
\end{align}
\end{document}
答案1
只需在定义中添加括号即可解决该问题\Mtrx
:
\newcommand{\Mtrx}[2][1]{{% <--- brace
\ifx0#1
\begin{matrix} #2 \end{matrix}
\else\ifx1#1
\begin{bmatrix} #2 \end{bmatrix}
\else\ifx2#1
\begin{pmatrix} #2 \end{pmatrix}
\fi\fi\fi
}} % <--- brace
不过,我会这样做:
\documentclass{scrreprt}
\usepackage{amsmath}
\newcommand{\Mtrx}[2][]{%
\begin{#1matrix} #2 \end{#1matrix}
}
\begin{document}
\begin{equation}
\Mtrx[p]{A & B \\ C & D} = \Mtrx[b]{c\\d}
\end{equation}
\begin{align}
\Mtrx[p]{A & B \\ C & D} &= 0
\end{align}
\end{document}
如果你真的喜欢数字,
\documentclass{scrreprt}
\usepackage{amsmath}
\newcommand{\Mtrx}[2][0]{%
\begin{\mtrxtype{#1}matrix} #2 \end{\mtrxtype{#1}matrix}
}
\newcommand{\mtrxtype}[1]{%
\ifcase#1\or b\or p\fi
}
\begin{document}
\begin{equation}
\Mtrx[2]{A & B \\ C & D} = \Mtrx[1]{c\\d}
\end{equation}
\begin{align}
\Mtrx[2]{A & B \\ C & D} &= 0
\end{align}
\end{document}
答案2
错误是由于使用 & 符号引起的。新命令中的这些符号必须以某种方式隐藏起来align
。例如尝试
\begin{align}
{\Mtrx[2]{A & B \\ C & D}} &= 0
\end{align}
或者重新定义你的命令如下:
\documentclass{scrreprt}
\usepackage{amsmath}
\newcommand{\Mtrx}[2][1]{
\ifx 0#1
{\begin{matrix} #2 \end{matrix}}
\else\ifx 1#1
{\begin{bmatrix} #2 \end{bmatrix}}
\else\ifx 2#1
{\begin{pmatrix} #2 \end{pmatrix}}
\fi\fi\fi
}
\begin{document}
% everything as expected here:
\begin{equation}
\Mtrx[2]{A & B \\ C & D} = \Mtrx[1]{c\\d}
\end{equation}
% The following align-equation gives an error: NOT ANYMORE
\begin{align}
\Mtrx[2]{A & B \\ C & D} &= 0
\end{align}