1

I want to draw a large sparse matrix with equal column widths. Because I don't want to explicitly write all the zeros, I want to draw dotted/dashed lines to separate all columns and rows. This is my MWE:

\documentclass[a4paper]{report}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amsfonts,amssymb}
\usepackage{empheq,nccmath} % boxes in align environment
\usepackage[left=1.00in, right=1.00in, top=1.00in, bottom=1.00in]{geometry}

% draw vertical line down matrix
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
  \hskip -\arraycolsep
  \let\@ifnextchar\new@ifnextchar
  \array{#1}}
\makeatother

% fixed column width
\usepackage{tabularx}
\newcolumntype{C}[1]{>{\hspace{0pt}\centering\arraybackslash}p{#1}}

\begin{document}

\begin{equation}
A=
\resizebox{.99\hsize}{!}{\ensuremath{
\begin{bmatrix}[C{12mm}|C{12mm}|C{12mm}|C{12mm}|
                C{12mm}|C{12mm}|C{12mm}|C{12mm}]%[cccc|cccc]
$\alpha$ & & & & & & & $1$ \\ \hline
$\alpha$ & & & & & & & \\ \hline
 & & & & & & & \\ \hline
 & & & & & & & \\  \hline
 & & & $\alpha$ & & & & \\ \hline
 & & & $1$ & & & & \\ \hline
 & & & & & & & \\ \hline
 & & & & & & $\beta$ & \\ \hline
$\alpha$ & & & & & $\alpha$ & & \\ \hline
 & & & & & & &
\end{bmatrix}%
}}.
\end{equation}

\end{document}

I can control the column widths and draw solid lines in the matrix. What is the most efficient way to turn those solid lines into dotted/dashed lines (or even just make those solid lines gray)? My code looks quite messy as it is.

1 Answer 1

1

You could use a TikZ matrix. Note: if you draw each node individually, they don't quite line up in straight lines.

\documentclass[a4paper]{report}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amsfonts,amssymb}
\usepackage{empheq,nccmath} % boxes in align environment
\usepackage[left=1.00in, right=1.00in, top=1.00in, bottom=1.00in]{geometry}
\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}
\begin{equation}
\begin{tikzpicture}[baseline=(current bounding box.center)]
\matrix[matrix of math nodes,
  nodes={minimum size=2em},
  nodes in empty cells,
  left delimiter=\lbrack,
  right delimiter=\rbrack,
] (A) % matrix name
{
\alpha & \strut & & & & & & 1 \\
\alpha & & & & & & & \\
 & & & & & & & \\
 & & & & & & & \\
 & & & \alpha & & & & \\
 & & & 1 & & & & \\
 & & & & & & & \\
 & & & & & & \beta & \\
\alpha & & & & & \alpha & & \\
 & & & & & & & \\
};
\foreach \i in {1,2,...,9} {\draw[dotted] (A-\i-1.south -| A.west) -- (A-\i-1.south -| A.east);}
\foreach \i in {1,2,...,7} {\draw[dotted] (A-1-\i.east |- A.north) -- (A-1-\i.east |- A.south);}
\end{tikzpicture}
\end{equation}

\end{document}

demo

1
  • This works great! FYI nodes={minimum size=2em} can be changed to nodes={minimum width=4em,minimum height=2em} in order to adjust the width/height of the cells. Oct 6, 2017 at 6:46

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .