我使用\arr
宏作为环境的快捷方式bmatrix
。此外,我使用破解版的bmatrix
(参见:制作“增强”系数矩阵的最佳方法是什么?),以便更容易地排版增广矩阵。
理论上,\arr{SOMETHING}
应该等于\begin{bmatrix}SOMETHING\end{bmatrix}
,而且大多数情况下确实如此。例如,
\[
\arr { 2 & 5 }
\arr { 1 \\ 2 },
\arr { 1 & 3 }
\arr { 1 \\ 2 }
\]
生产
然而,当我把上面的几行放在另一行里面\arr
,为了得到一个嵌套矩阵,它就爆炸了
\[
\arr{
\arr { 2 & 5 }
\arr { 1 \\ 2 } \\
\arr { 1 & 3 }
\arr { 1 \\ 2 }
}
\]
出现错误“不完整的 \ifdim”,而
\begin{bmatrix}
\begin{bmatrix}
2 & 5
\end{bmatrix}
\begin{bmatrix}
1 \\ 2
\end{bmatrix}
\\
\begin{bmatrix}
1 & 3
\end{bmatrix}
\begin{bmatrix}
1 \\ 2
\end{bmatrix}
\end{bmatrix}
作品
为什么?
下面是代码
\documentclass[a4paper,11pt]{article}
\usepackage{amsmath}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{amssymb}
\makeatletter
% https://tex.stackexchange.com/questions/2233/
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols r]{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\newcommand{\arr}[2][\@empty]{%
\setbox\@tempboxa\hbox{#1}
\ifdim\wd\@tempboxa=0pt
\begin{bmatrix}#2\end{bmatrix}
\else
\begin{bmatrix}[#1]#2\end{bmatrix}
\fi
}
\makeatother
\begin{document}
\[
\arr { 2 & 5 }
\arr { 1 \\ 2 },
\arr { 1 & 3 }
\arr { 1 \\ 2 }
\]
% \[
% \arr{
% \arr { 2 & 5 }
% \arr { 1 \\ 2 } \\
% \arr { 1 & 3 }
% \arr { 1 \\ 2 }
% }
% \]
% \[
% \begin{bmatrix}
% \begin{bmatrix}
% 2 & 5
% \end{bmatrix}
% \begin{bmatrix}
% 1 \\ 2
% \end{bmatrix}
% \\
% \begin{bmatrix}
% 1 & 3
% \end{bmatrix}
% \begin{bmatrix}
% 1 \\ 2
% \end{bmatrix}
% \end{bmatrix}
% \]
\end{document}
编辑:未简化的定义\arr
如下:
\newcommand{\arr}{\@ifstar\arr@star\arr@nostar}
\newcommand{\arr@nostar}[2][\@empty]{%
\setbox\@tempboxa\hbox{#1}\ifdim\wd\@tempboxa=0pt
\begin{bmatrix}#2\end{bmatrix}
\else \begin{bmatrix}[#1]#2\end{bmatrix} \fi
}
\newcommand{\arr@star}[2][\@empty]{%
\setbox\@tempboxa\hbox{#1}\ifdim\wd\@tempboxa=0pt
\begin{matrix}#2\end{matrix}
\else \begin{matrix}[#1]#2\end{matrix} \fi
}
答案1
\setbox
是一种很容易出错的方法来测试参数是否为空,但在这里我认为你根本不需要测试:
\documentclass[a4paper,11pt]{article}
\usepackage{amsmath}
\usepackage{marvosym}
\usepackage{wasysym}
\usepackage{amssymb}
\makeatletter
% http://tex.stackexchange.com/questions/2233/
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols r]{%
\hskip -\arraycolsep
\let\@ifnextchar\new@ifnextchar
\array{#1}}
\newcommand{\arr}{\@ifstar\arr@star\arr@nostar}
\newcommand{\arr@star}[2][*\c@MaxMatrixCols r]{%
\begin{matrix}[#1]#2\end{matrix}%
}
\newcommand{\arr@nostar}[2][*\c@MaxMatrixCols r]{%
\begin{bmatrix}[#1]#2\end{bmatrix}%
}
\makeatother
\begin{document}
\[
\arr { 2 & 5 }
\arr { 1 \\ 2 },
\arr { 1 & 3 }
\arr { 1 \\ 2 }
\]
\[
\arr{
\arr { 2 & 5 }
\arr { 1 \\ 2 } \\
\arr { 1 & 3 }
\arr { 1 \\ 2 }
}
\]
% \[
% \begin{bmatrix}
% \begin{bmatrix}
% 2 & 5
% \end{bmatrix}
% \begin{bmatrix}
% 1 \\ 2
% \end{bmatrix}
% \\
% \begin{bmatrix}
% 1 & 3
% \end{bmatrix}
% \begin{bmatrix}
% 1 \\ 2
% \end{bmatrix}
% \end{bmatrix}
% \]
\end{document}