How to have both horizontal and vertical curly braces in a matrix

bracesmatrices

I want to make horizontal and vertical curly braces to show up simultaneously just outside a matrix, but it only works when I use one or the other, instead of both.

I use \left.\right\} for vertical braces, and \underbrace{}_{} for horizontal ones.

Here's my attempt:

\begin{align*}
    \underset{m\times n}{0}=
    \underbrace{\left.
    \begin{bmatrix}
        0 & 0 & \dots & 0\\
        0 & 0 & \dots & 0\\
        \dots & \dots & \dots & \dots\\
        0 & 0 & \dots & 0
    \end{bmatrix}
    \right\}\text{$m$ rows}}_\text{$n$ columns}
\end{align*}

Enter image description here

Obviously, the "n columns" one is too long: I want it to cover from the first element to the last, not all the way to the end of the vertical brace. How can I fix it?

Best Answer

I wouldn't be so fussy about showing the definition of a zero matrix like that, but you know your students…

\documentclass{article}
\usepackage{amsmath}

\usepackage{lipsum} % for mock text

\begin{document}

\lipsum[1][1-4]
\begin{equation*}
% a disposable command for avoiding repetitions
\newcommand{\zm}{%
  \begin{bmatrix}
    0 & 0 & \dots & 0\\
    0 & 0 & \dots & 0\\
    \vdots & \vdots & \ddots & \vdots\\
    0 & 0 & \dots & 0
  \end{bmatrix}%
}
\underset{m\times n}{0}=
  \left.
  \,\smash[b]{\underbrace{\!\zm\!}_{\textstyle\text{$n$ columns}}}\,
  \right\}\text{$m$ rows}
  \vphantom{\underbrace{\zm}_{\text{$n$ columns}}}
\end{equation*}
\lipsum[1][1-3]

\end{document}

The trick is to pretend that the \underbrace part does not really extend below the baseline, so \right\} will just take care of the upper part, but it acts symmetrically around the formula axis.

A \vphantom makes the formula with the right depth so not to destroy the spacing with the following material.

I applied \, and \! to avoid the underbrace being too wide and collide with the right brace.

Don't use align for single displayed formulas.

enter image description here

Related Question