I use a \arr
macro as a shortcut for bmatrix
environments. In addition,
I use a hacked version of bmatrix
(see: What's the best way make an “augmented” coefficient matrix?) so that it's easier to typeset augmented
matrices.
In theory, \arr{SOMETHING}
should be equivalent
to \begin{bmatrix}SOMETHING\end{bmatrix}
, and most of the time it is. For
instance,
\[
\arr { 2 & 5 }
\arr { 1 \\ 2 },
\arr { 1 & 3 }
\arr { 1 \\ 2 }
\]
produces
However, when I put the lines above inside another \arr
, in order to
obtain a nested matrix, it blows up
\[
\arr{
\arr { 2 & 5 }
\arr { 1 \\ 2 } \\
\arr { 1 & 3 }
\arr { 1 \\ 2 }
}
\]
with an error that says "incomplete \ifdim", whereas
\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}
works
Why?
Below follows the code
\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}
EDIT: unsimplified definition of \arr
follows:
\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
}
\newcommand{\arr}[2][c]{\begin{bmatrix}[#1]#2\end{bmatrix}}
– David Carlisle Jan 23 '15 at 11:48\arr
that uses no brackets. Here I simplified by renaming\arr@nostar
to\arr
, but in reality is\arr
is a "dispatcher" macro. – Ernest A Jan 23 '15 at 11:52