5

While I was answering another question, I realized that when the option every matrix/.style={name=...} is added to a tikz-cd environment, some spurious spaces appear, see the following MWE:

\documentclass{article}
\usepackage{tikz-cd}
\usepackage{mwe}

\begin{document}
The difference between these commutative diagrams:

\begin{tikzcd}[execute at end picture={
    \filldraw[red] (\tikzcdmatrixname-1-1) circle[radius=1pt];
    \filldraw[blue] (\tikzcdmatrixname-1-2) circle[radius=1pt];
    \filldraw[green] (\tikzcdmatrixname-2-1) circle[radius=1pt];
    \filldraw[orange] (\tikzcdmatrixname-2-2) circle[radius=1pt];
  }]
  A \ar[r]\ar[d] & B \ar[d] \\
  C \ar[r]       & D \\
\end{tikzcd}%
\begin{tikzcd}[execute at end picture={
    \filldraw[red] (\tikzcdmatrixname-1-1) circle[radius=1pt];
    \filldraw[blue] (\tikzcdmatrixname-1-2) circle[radius=1pt];
    \filldraw[green] (\tikzcdmatrixname-2-1) circle[radius=1pt];
    \filldraw[orange] (\tikzcdmatrixname-2-2) circle[radius=1pt];
  }]
  A \ar[r]\ar[d] & B \ar[d] \\
  C \ar[r]       & D \\
\end{tikzcd}%

and the following two is only the \texttt{every matrix/.style=\{name=...\}} option, which produces some spurios spaces, as you can easily see:

\begin{tikzcd}[every matrix/.style={name=mycd}, 
    execute at end picture={
    \filldraw[red] (mycd-1-1) circle[radius=1pt];
    \filldraw[blue] (mycd-1-2) circle[radius=1pt];
    \filldraw[green] (mycd-2-1) circle[radius=1pt];
    \filldraw[orange] (mycd-2-2) circle[radius=1pt];
    }]
    A \ar[r]\ar[d] & B \ar[d] \\
    C \ar[r]       & D \\
\end{tikzcd}%
\begin{tikzcd}[every matrix/.style={name=mycd}, 
    execute at end picture={
    \filldraw[red] (mycd-1-1) circle[radius=1pt];
    \filldraw[blue] (mycd-1-2) circle[radius=1pt];
    \filldraw[green] (mycd-2-1) circle[radius=1pt];
    \filldraw[orange] (mycd-2-2) circle[radius=1pt];
    }]
    A \ar[r]\ar[d] & B \ar[d] \\
    C \ar[r]       & D \\
\end{tikzcd}%

Is there any \texttt{\%} missing somewhere?
\end{document}

enter image description here

CarLaTeX
  • 62,716

1 Answers1

6

The every matrix style is defined as

every matrix/.style={/tikz/inner sep=+0pt},

and you redefine it completely, thus removing the inner sep setting, and I guess the default value of 0.333em is used instead. So you want every matrix/.append style, to add to the style instead of redefining it. (Also, you probably want to remove the \\ from the last row, which gives an empty row.)

Output, with bounding rectangle drawn:

output of code

\documentclass{article}
\usepackage{tikz-cd}

\begin{document}
The difference between these commutative diagrams:

\begin{tikzcd}[execute at end picture={
    \filldraw[red] (\tikzcdmatrixname-1-1) circle[radius=1pt];
    \filldraw[blue] (\tikzcdmatrixname-1-2) circle[radius=1pt];
    \filldraw[green] (\tikzcdmatrixname-2-1) circle[radius=1pt];
    \filldraw[orange] (\tikzcdmatrixname-2-2) circle[radius=1pt];
    \draw (current bounding box.south west) rectangle (current bounding box.north east);
  }]
  A \ar[r]\ar[d] & B \ar[d] \\
  C \ar[r]       & D 
\end{tikzcd}%
\begin{tikzcd}[execute at end picture={
    \filldraw[red] (\tikzcdmatrixname-1-1) circle[radius=1pt];
    \filldraw[blue] (\tikzcdmatrixname-1-2) circle[radius=1pt];
    \filldraw[green] (\tikzcdmatrixname-2-1) circle[radius=1pt];
    \filldraw[orange] (\tikzcdmatrixname-2-2) circle[radius=1pt];
    \draw (current bounding box.south west) rectangle (current bounding box.north east);
  }]
  A \ar[r]\ar[d] & B \ar[d] \\
  C \ar[r]       & D 
\end{tikzcd}%

and the following two is only the \texttt{every matrix/.style=\{name=...\}} option, which produces some spurios spaces, as you can easily see:

\begin{tikzcd}[every matrix/.append style={name=mycd}, 
    execute at end picture={
    \filldraw[red] (mycd-1-1) circle[radius=1pt];
    \filldraw[blue] (mycd-1-2) circle[radius=1pt];
    \filldraw[green] (mycd-2-1) circle[radius=1pt];
    \filldraw[orange] (mycd-2-2) circle[radius=1pt];
    \draw (current bounding box.south west) rectangle (current bounding box.north east);
    }]
    A \ar[r]\ar[d] & B \ar[d] \\
    C \ar[r]       & D 
\end{tikzcd}%
\begin{tikzcd}[every matrix/.append style={name=mycd},%
    execute at end picture={%
    \filldraw[red] (mycd-1-1) circle[radius=1pt];
    \filldraw[blue] (mycd-1-2) circle[radius=1pt];
    \filldraw[green] (mycd-2-1) circle[radius=1pt];
    \filldraw[orange] (mycd-2-2) circle[radius=1pt];
    \draw (current bounding box.south west) rectangle (current bounding box.north east);
    }]
    A \ar[r]\ar[d] & B \ar[d] \\
    C \ar[r]       & D 
\end{tikzcd}%

Is there any \texttt{\%} missing somewhere?
\end{document}
Torbjørn T.
  • 206,688