54

How to add label to index the rows and columns of the matrix ? because I want to number the line outside the matrix

     \[
    \begin{array}{lc}
      \ Mat_{\varPhi to M} & \left(\begin{array}{@{}ccccc@{}}
            1 & 1 & 1 & 1 & 1 \\
            0 & 1 & 0 & 0 & 1 \\
            0 & 0 & 1 & 0 & 1 \\
            0 & 0 & 0 & 1 & 1 \\
            0 & 0 & 0 & 0 & 1
              \end{array}\right) \\[15pt]
    \end{array}
    \]
23

Here is an option using kbordermatrix:

enter image description here

\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\usepackage{kbordermatrix}% http://www.hss.caltech.edu/~kcb/TeX/kbordermatrix.sty
\begin{document}
\[
  \begin{array}{l@{{}={}}c}
  \text{Mat}_{\varphi\text{ to }M} & \left(\begin{array}{@{}ccccc@{}}
    1 & 1 & 1 & 1 & 1 \\
    0 & 1 & 0 & 0 & 1 \\
    0 & 0 & 1 & 0 & 1 \\
    0 & 0 & 0 & 1 & 1 \\
    0 & 0 & 0 & 0 & 1
  \end{array}\right)
  \end{array}
\]

\renewcommand{\kbldelim}{(}% Left delimiter
\renewcommand{\kbrdelim}{)}% Right delimiter
\[
  \text{Mat}_{\varphi\text{ to }M} = \kbordermatrix{
    & c_1 & c_2 & c_3 & c_4 & c_5 \\
    r_1 & 1 & 1 & 1 & 1 & 1 \\
    r_2 & 0 & 1 & 0 & 0 & 1 \\
    r_3 & 0 & 0 & 1 & 0 & 1 \\
    r_4 & 0 & 0 & 0 & 1 & 1 \\
    r_5 & 0 & 0 & 0 & 0 & 1
  }
\]

\end{document}

For more options and styles, including the usage of \bordermatrix, see Where is the \matrix command?

72

You can use the blkarray package:

\documentclass[12pt]{report}
\usepackage{blkarray}
\usepackage{amsmath}

\begin{document}

\[
\begin{blockarray}{cccccc}
a & b & c & d & e \\
\begin{block}{(ccccc)c}
  1 & 1 & 1 & 1 & 1 & f \\
  0 & 1 & 0 & 0 & 1 & g \\
  0 & 0 & 1 & 0 & 1 & h \\
  0 & 0 & 0 & 1 & 1 & i \\
  0 & 0 & 0 & 0 & 1 & j \\
\end{block}
\end{blockarray}
 \]

\end{document}

enter image description here

  • 4
    This approach is way more flexible and intuitive, +1, plus available through CTAN. – Мати Тернер Oct 8 '13 at 17:50
  • How can I make horizontal lines between rows? – dh16 Oct 15 '18 at 0:30
4

I'll add a variant with blockarray, with footnote size text as column and row headings (answer to another, duplicate question):

\documentclass{article}
\usepackage{mathtools}
\usepackage{blkarray, bigstrut} %

\begin{document}

\begin{equation*}
  \mathbf{S}=
  \begin{blockarray}{*{5}{c} l}
    \begin{block}{*{5}{>{$\footnotesize}c<{$}} l}
      Rose & Teal & Plum & Sand & Peach & \\
    \end{block}
    \begin{block}{[*{5}{c}]>{$\footnotesize}l<{$}}
      0 & 9 & 8 & 0 & 7 \bigstrut[t]& small \\
      3 & 5 & 6 & 5 & 1 & medium \\
      1 & 0 & 0 & 3 & 2 & large \\
    \end{block}
  \end{blockarray}
\end{equation*}

\end{document} 

enter image description here

  • Thanks for this contribution. It doesn't seem to work for font size though: I'm setting the column and header size to \tiny (or \footnotesize, as in the example) and it is displaying the headers with the same size as the coefficients. On the other hand, if I set the color of the headers as \color[gray]{0.6}, it does display correctly (i.e. headers in gray, coefficients in black). Do you know how to fix this? – Anakhand Sep 29 '18 at 13:05
2

I introduce this answer, because it uses a new feature of the tabstackengine which allows one to remember various data and dimensions from the most recently created stack. Thus, what is done here, since the labels are wider than the matrix content, are as follows:

  1. I set \fixTABwidth{T} to indicate that TABstacks should be built so that all columns are of a width fixed to the maximum column-width of the build. I also indicate that TABstacks that are built in text mode should be set in \scriptsize, colored blue.

  2. I build the column labels and save them in \collabels AND then I save, into macro \colwidth, the maximum dimension of the columns, which had been stored in \maxTABwidth.

  3. I save the stack of row labels as \rowlabels.

  4. Up to this point, the label stacks were created in text mode (they could have been just as easily done in math mode). But now, I execute the actual matrix in \ensurestackMath mode.

  5. To the right of the equal sign, I stack the column label stack upon the matrix itself. However, to get the right column width on the matrix elements, I merely needed to place one of the matrix entries in a box of width \colwidth, which was the saved column-width of the column label stack. Finally, I regurgitate my row label stack.

Here is the MWE.

\documentclass{article}
\usepackage{tabstackengine}[2016-11-30]
\usepackage{xcolor}
\begin{document}
\[
%\stackText% MUST BE PREVAILING MODE TO GET LABELS IN TEXT
\TABstackTextstyle{\scriptsize\color{blue}}
\fixTABwidth{T}
\savestack\collabels{\tabbedCenterstack{dog & cat& mouse & aardvark & ant}}
\edef\colwidth{\maxTABwd}
\savestack\rowlabels{\tabbedCenterstack[l]{this \\ land \\ is \\ my \\ land!}}
\ensurestackMath{
  \textrm{Mat}_{\varphi \mathrm{~to~} M} = 
  \stackon{%
    \parenMatrixstack{
    \makebox[\colwidth]{$1$} & 1 & 1 & 1 & 1\\
    0 & 1 & 0 & 0 & 1\\
    0 & 0 & 1 & 0 & 1\\
    0 & 0 & 0 & 1 & 1\\
    0 & 0 & 0 & 0 & 1
    }%
  }{\collabels}
  \rowlabels
}
\]
\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.