# 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}

-

## 3 Answers

Maybe this?

\documentclass{article}
\usepackage{amsmath,mathtools}
\DeclareMathOperator{\Mat}{Mat}
\newcommand{\diagentry}[1]{\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}


-

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

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
I would instead do either
$\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}


-