# How to create diagonal matrix with an aligned diagonal?

How do I display truly diagonal matrices? I want to have a diagonal bloc matrix. The solution below has several problems : the diagonal terms aren't really aligned in the first half, and the diagonal dots \ddots aren't steep enough between the zeros in the second half.

\documentclass{article}
\usepackage{amsmath}
\begin{document}
$\mathrm{Mat}(u;\mathcal{B})= \begin{pmatrix} I_{n_+}\\&-I_{n_-}\\ &&R_{\theta_1}\\ &&&R_{\theta_2}\\ &&&&\ddots\\ &&&&&R_{\theta_r}\\ &&&&&&0\\ &&&&&&&0\\ &&&&&&&&\ddots\\ &&&&&&&&&0\\ \end{pmatrix}$
\end{document}

• @Sebastiano Please never ever remove such spaces, this will bereave us of any possibility to revert the \\ corruption !!!!! – samcarter_is_at_topanswers.xyz May 27 '17 at 21:12
• @samcarter Ok. I like the order and I thought that eliminating the spaces does not affect the correct compilation. – Sebastiano May 29 '17 at 6:12

Maybe this?

\documentclass{article}
\usepackage{amsmath,mathtools}
\DeclareMathOperator{\Mat}{Mat}
\newcommand{\diagentry}{\mathmakebox[1.8em]{#1}}
\newcommand{\xddots}{%
\raise 4pt \hbox {.}
\mkern 6mu
\raise 1pt \hbox {.}
\mkern 6mu
\raise -2pt \hbox {.}
}
\begin{document}
$\Mat(u;\mathcal{B})= \begin{pmatrix} \diagentry{I_{n_+}}\\ &\diagentry{-I_{n_-}}\\ &&\diagentry{R_{\theta_1}}\\ &&&\diagentry{R_{\theta_2}}\\ &&&&\diagentry{\xddots}\\ &&&&&\diagentry{R_{\theta_r}}\\ &&&&&&\diagentry{0}\\ &&&&&&&\diagentry{0}\\ &&&&&&&&\diagentry{\xddots}\\ &&&&&&&&&\diagentry{0}\\ \end{pmatrix}$
\end{document} another one that puts the burden on the reader but saves his/her eyes in my opinion

\documentclass{article}
\usepackage{mathtools}
\DeclareMathOperator{\Mat}{Mat}
\DeclarePairedDelimiter{\diagfences}{(}{)}
\newcommand{\diag}{\operatorname{diag}\diagfences}
\begin{document}\noindent
$\Mat(u;\mathcal{B})= \begin{pmatrix} I_{n_+}\\ &\!\!-I_{n_-}\\ &&R_{\theta}\\ &&&0_m \end{pmatrix},\;R_{\theta}=\diag{R_{\theta_1}, \cdots,R_{\theta_r}}$
or even
$\Mat(u;\mathcal{B})= \diag{I_{n_+},-I_{n_-},R_{\theta},0_m},\; R_{\theta}=\diag{R_{\theta_1}\, ,\, \cdots,R_{\theta_r}}$

\end{document}  One possibility is to assert control and position the items at exactly a 45 degree slope (or whatever slope you want) by adjusting the coordinates:

\documentclass{article}
\usepackage{amsmath}
\begin{document}
$\mathrm{Mat}(u;\mathcal{B})= \begin{pmatrix} I_{n_+}\\&-I_{n_-}\\ &&R_{\theta_1}\\ &&&R_{\theta_2}\\ &&&&\ddots\\ &&&&&R_{\theta_r}\\ &&&&&&0\\ &&&&&&&0\\ &&&&&&&&\ddots\\ &&&&&&&&&0\\ \end{pmatrix}$

$\setlength\unitlength{13pt} \mathrm{Mat}(u;\mathcal{B})= \left(\begin{picture}(11,6)(0,-5.5) \put(1,-1){\makebox(0,0){I_{n_+}}} \put(2,-2){\makebox(0,0){-I_{n_-}}} \put(3,-3){\makebox(0,0){R_{\theta_1}}} \put(4,-4){\makebox(0,0){R_{\theta_2}}} %\put(5,-5){\makebox(0,0){\ddots}} \put(4.8,-4.8){\makebox(0,0){\cdot}} \put(5.1,-5.1){\makebox(0,0){\cdot}} \put(5.4,-5.4){\makebox(0,0){\cdot}} \put(6,-6){\makebox(0,0){R_{\theta_r}}} \put(7,-7){\makebox(0,0){0}} \put(8,-8){\makebox(0,0){0}} %\put(9,-9){\makebox(0,0){\ddots}} \put(8.8,-8.8){\makebox(0,0){\cdot}} \put(9.1,-9.1){\makebox(0,0){\cdot}} \put(9.4,-9.4){\makebox(0,0){\cdot}} \put(10,-10){\makebox(0,0){0}} \end{picture} \right)$

\end{document}

• +1 for using a picture environment. – Mico Dec 9 '13 at 22:34
• The second solution is pretty good. It seems a lot of code but nothing that can not be solved with a macro. – osjerick Dec 9 '13 at 22:56
• @OSjerick Yep, and I would have upvoted David's answer at the drop of a hat … if only it did use a macro for this ;) – Christian Jan 4 '14 at 22:28

Instead of writing anything, simply leave the cell blank and array will take care of it. Here is the code

\begin{equation}
\rho _{\epsilon} = \left( \begin{array}{ccccc}
\epsilon &  &  &  &  \\
& \epsilon &  &  &  \\
&  & \ddots & &  \\
&  &  & \epsilon &  \\
&  &  &  & \epsilon \\
\end{array} \right)
\end{equation}


The result looks like Using environment pmatrix would be a great idea, but it is hard to take care of the spacing and alignment.

Here I did 2 things to the OP's MWE. I used a TABstack with \fixTABwidth{T} to auto set all column widths the same; and I designed an \xddots to be more diagonal.

\documentclass{article}
\usepackage{tabstackengine,amsmath}
\TABstackMath
\fixTABwidth{T}
\newcommand\xddots{\stackunder[2.5pt]{\stackanchor[2.8pt]{\kern-14pt.}{.}}{\kern14pt.}}
\begin{document}
$\mathrm{Mat}(u;\mathcal{B})= \parenMatrixstack{ I_{n_+} &&&&&&&&&\\ &-I_{n_-} &&&&&&&&\\ &&R_{\theta_1}&&&&&&&\\ &&&R_{\theta_2}&&&&&&\\ &&&&\xddots &&&&&\\ &&&&&R_{\theta_r}&&&&\\ &&&&&&0 &&&\\ &&&&&&&0 &&\\ &&&&&&&&\xddots &\\ &&&&&&&&&0 }$
\end{document} 