# 3. Matrix and similar environments | LaTeX manual

Contents
[ Hide Show ]

There are a number of environments for typesetting matrix-like structures defined in the amsmath package. They are all similar to the standard LaTeX array environment in syntax and layout. In general, a wide variety of two-dimensional mathematical structures and tabular layouts can be described as arrays.

Three environments - cases, matrix and pmatrix - replace the commands of standard LaTeX. The standard commands use a different notation so they can’t be used together with the environment forms discussed here. The amsmath package will produce an error message if one of the old commands is used. Conversely, if you try to use the amsmath environment forms without loading the package, you will most likely get the following error message: "Misplaced alignment tab character &".

## 3.1. The cases environment

The case environment is used to handle constructions, where a single equation has a few variants. Such constructions are very common in maths. It produces an array with two columns, both left-aligned.

1\usepackage{amsmath}
2% -------------------------------------------------------------------------------
3\begin{equation}
4P_{r - j} = \begin{cases}
5                     0 & \text{if $r - j$ is odd,} \\
6r! \, (-1)^{(r - j)/2} & \text{if $r - j$ is even.}
7\end{cases}
8\end{equation}

Notice the use of the \text command and the “embedded math mode” in the text strings.

## 3.2. The matrix environments

The matrix environments, unlike LaTeX’s array, don’t accept an argument that specifies the formats of the columns. Instead, they provide a default format: up to 10 centered columns. The spacing also slightly differs from the default in array. The following examples illustrate the matrix, pmatrix, bmatrix, Bmatrix, vmatrix and Vmatrix environments.

1\usepackage{amsmath}
2% -------------------------------------------------------------------------------
3\begin{gather*}
4\begin{matrix} 0 & 1 \\ 1 & 0 \end{matrix} \quad \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix} \\
5\begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \quad \begin{Bmatrix} 1 & 0 \\ 0 & -1 \end{Bmatrix} \\
6\begin{vmatrix} a & b \\ c & d \end{vmatrix} \quad \begin{Vmatrix} i & 0 \\ 0 & -i \end{Vmatrix}
7\end{gather*}

The MaxMatrixCols counter determines the maximum number of columns in a matrix environment. You can change it using LaTeX’s standard counter command. The value of the \arraycolsep length parameter determines the amount of space between the columns. Just like in standard arrays, but no space is added on either side of array. More columns will make LaTeX work harder and require more resources. However, setting MaxMatrixCols to 20 or higher is possible without a noticeable performance hit, since with today’s typical TeX implementations such limits are less important.

 1\usepackage{amsmath}
2\setcounter{MaxMatrixCols}{20}
3% -------------------------------------------------------------------------------
4$5\begin{Vmatrix} 6\,a&b&c&d&e&f&g&h&i&j &\cdots\,{} \\ 7&a&b&c&d&e&f&g&h&i &\cdots\,{} \\ 8& &a&b&c&d&e&f&g&h &\cdots\,{} \\ 9& & &a&b&c&d&e&f&g &\cdots\,{} \\ 10& & & &\ddots&\ddots&\hdotsfor[2]{5}\,{} 11\end{Vmatrix}$

In this example the \hdotsfor command is used to produce a row of dots in a matrix, spanning a given number of columns. The optional parameter (here 2) may be used to specify a multiplier for the default space (3 math units) between the dots. The thin space and the brace group \,{} at the end of each row simply make the layout look better; together they produce two thin spaces, about 6mu or 1/3em.

To produce a small inline matrix for use in text, you can use the smallmatrix environment.

1\usepackage{amsmath}
2% -------------------------------------------------------------------------------
3To show the effect of the matrix on surrounding lines inside a paragraph, we put it here:
4$\left( \begin{smallmatrix} 51 & 0 \\ 0 & -1 6\end{smallmatrix} \right)$
7and follow it with enough text to ensure that there is at least one full line below the matrix.

Note that the text lines are not spread apart even though the line before the small matrix contains letters with descenders.

## 3.3. Stacking in subscripts and superscripts

Sometimes you may need to typeset several lines within a subscript or superscript. To do this, you can use the \substack command with \\ delimiting rows.

The subarray environment is a slightly more general structure that allows you to align lines to the left or right, rather than have them centered.

 1\usepackage{amsmath}
2% -------------------------------------------------------------------------------
3\begin{gather}
4\sum_{\substack{0 \le i \le m \\ 0 < j < n}} P(i, j) \\
5\sum_{\begin{subarray}{l}
6i \in \Lambda \\
70 \le i \le m \\
80 < j < n
9\end{subarray}} P(i, j)
10\end{gather}

Note that both environments need to be surrounded by braces when they appear as a subscript or a superscript.

## 3.4. Commutative diagrams

The amscd package defines some commands for producing simple commutative diagrams based on arrays. There are some useful shorthand forms for specifying decorated arrows and other connectors. However, it has limitations - for example, these connectors can be only horizontal or vertical.

In the CD environment, the notations @>>>, @<<<, @VVV, and @AAA produce right, left, down and up arrows, respectively. The following example also shows the use of the \DeclareMathOperator command.

 1\usepackage{amsmath,amscd}
3\DeclareMathOperator\cf {cf}
4\DeclareMathOperator\cov{cov}
5\DeclareMathOperator\non{non}
6% -------------------------------------------------------------------------------
7$\begin{CD} 8\cov (L) @>>> \non (K) @>>> \cf (K) \\ 9@VVV @AAA @AAA \\ 10\add (L) @>>> \add (K) @>>> \cov (K) \\ 11\end{CD}$

Let’s see how decorations are specified. For the horizontal arrows, material between the first and second > or < symbols will be typeset as a superscript, and material between the second and third will be typeset as a subscript. Similarly, material between the first and second, or second and third, A’s or V’s of vertical arrows will be typeset as left or right “side-script”. We will see the use of this format in the next example.

The notations @= and @| give horizontal and vertical double lines.

Instead of a visible arrow, you can use a “null arrow” (@.) to fill out an array where needed.

1\usepackage{amsmath, amscd}
2\DeclareMathOperator{\End}{End}
3% -------------------------------------------------------------------------------
4$\begin{CD} 5S^{W_\Lambda}\otimes T @>j>> T \\ 6@VVV @VV{\End P}V \\ 7(S \otimes T)/I @= (Z\otimes T)/J 8\end{CD}$

A similar layout can be produced in standard LaTeX. But it doesn’t look as good.

1$\begin{array}{ccc} 2S^{\mathcal{W}_\Lambda}\otimes T & \stackrel{j}{\longrightarrow} & T \\ 3\Big\downarrow & & \Big\downarrow\vcenter{\rlap{\scriptstyle{\mathrm{End}}\,P}} \\ 4(S\otimes T)/I & = & (Z\otimes T)/J 5\end{array}$

This example shows quite clearly how much better results the amscd package produces: the notation is easier, the horizontal arrows are longer, the spacing between elements is much improved. The more specialized packages will help you achieve even more beautiful results.

## 3.5. Delimiters surrounding an array: the delarray package

In this section, we will discuss a useful general extension to the array package. Using this extension, the user can specify opening and closing extensible delimiters to surround a math array environment. Let’s look at the example:

1\usepackage{delarray}
2% -------------------------------------------------------------------------------
3$\mathcal{Q} = 4\begin{array}[t] ( {cc} ) X & Y \end{array} 5\begin{array}[t] [ {cc} ] A & B \\ C & D \end{array} 6\begin{array}[b] \lgroup{cc}\rgroup L \\ M \end{array} 7$

Note that the delarray package is independent of amsmath but it automatically loads the array package if necessary.

The delimiters are placed on either side of the {cc}.

This example also illustrates the most useful feature of the delarray package: the use of the [t] and [b] optional arguments, which are not allowed with amsmath’s matrix environments. These show that use of the delarray syntax is not equivalent to surrounding the array environment with \left and \right, since the delimiters are raised as well as the array itself.