# How to thicken horizontal lines in a tikz matrix, without affecting the vertical spacing?

In the following example, I attempt to thicken some of the horizontal lines in a tikz matrix using the method in the accepted answer to Horizontal row separation line in tikz matrix (like \hline in tabular).

This is a "before and after" minimal working example:

\documentclass[crop]{standalone}

\usepackage{tikz}
\usetikzlibrary{matrix}

\begin{document}

\tikzset{
toprule/.style={%
execute at end cell={%
\draw [line cap=rect,#1] (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.north west) -- (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.north east);%
}
}
}

% I want to thicken some horizontal lines in this table...
\begin{tikzpicture}
\matrix[matrix of nodes,
column sep=-\pgflinewidth, row sep=-\pgflinewidth,
nodes={draw,
minimum height=20pt,
text width=15pt,
align=center
}
]{
|[fill=red!40]| 1 & |[fill=blue!40]| 2 & |[fill=green!40]| 3 \\
|[fill=green!40]| 1 & |[fill=red!40]| 2 & |[fill=blue!40]| 3 \\
|[fill=blue!40]| 1 & |[fill=green!40]| 2 & |[fill=red!40]| 3 \\
|[fill=red!40]| 1 & |[fill=blue!40]| 2 & |[fill=green!40]| 3 \\
|[fill=green!40]| 1 & |[fill=red!40]| 2 & |[fill=blue!40]| 3 \\
|[fill=blue!40]| 1 & |[fill=green!40]| 2 & |[fill=red!40]| 3 \\
};
\end{tikzpicture}

% This is how I attempt to do it...
\begin{tikzpicture}
\matrix[matrix of nodes,
column sep=-\pgflinewidth, row sep=-\pgflinewidth,
nodes={draw,
minimum height=20pt,
text width=15pt,
align=center
},
row 3/.style={toprule=thick},
row 5/.style={toprule=thick}
]{
|[fill=red!40]| 1 & |[fill=blue!40]| 2 & |[fill=green!40]| 3 \\
|[fill=green!40]| 1 & |[fill=red!40]| 2 & |[fill=blue!40]| 3 \\
|[fill=blue!40]| 1 & |[fill=green!40]| 2 & |[fill=red!40]| 3 \\
|[fill=red!40]| 1 & |[fill=blue!40]| 2 & |[fill=green!40]| 3 \\
|[fill=green!40]| 1 & |[fill=red!40]| 2 & |[fill=blue!40]| 3 \\
|[fill=blue!40]| 1 & |[fill=green!40]| 2 & |[fill=red!40]| 3 \\
};
\end{tikzpicture}

\end{document}


Here's a screenshot, zoomed in of the result:

For some unknown reason, when I draw the horizontal line, it introduces a vertical space between the columns. What am I doing wrong?

Question: How to thicken horizontal lines in a tikz matrix, without affecting the vertical spacing?

• You should at least set outer sep=0pt in the nodes as in the linked code. – Andrew Swann Jan 8 '17 at 13:03

Like this?

You almost done the solution :). I only make two small changes (they are indicated in MWE below by ˙% <--:

\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{matrix}

\begin{document}

\tikzset{
toprule/.style={%
execute at end cell={%
\draw [line cap=rect,#1] (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.north west) -- (\tikzmatrixname-\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn.north east);%
}
}
}

\begin{tikzpicture}
\matrix[matrix of nodes,
column sep=-0.5\pgflinewidth, row sep=-0.5\pgflinewidth,% <-- changed
nodes={draw,
minimum height=20pt,
text width=15pt,
align=center,
},
row 3/.style={toprule=thick},
row 5/.style={toprule=thick}
]{
|[fill=red!40]| 1   & |[fill=blue!40]| 2    & |[fill=green!40]| 3   \\
|[fill=green!40]| 1 & |[fill=red!40]| 2     & |[fill=blue!40]| 3    \\
|[fill=blue!40]| 1  & |[fill=green!40]| 2   & |[fill=red!40]| 3     \\
|[fill=red!40]| 1   & |[fill=blue!40]| 2    & |[fill=green!40]| 3   \\
|[fill=green!40]| 1 & |[fill=red!40]| 2     & |[fill=blue!40]| 3    \\
|[fill=blue!40]| 1  & |[fill=green!40]| 2   & |[fill=red!40]| 3     \\
};
\end{tikzpicture}

\end{document}