在 tikz-cd 中设置矩阵的名称

在 tikz-cd 中设置矩阵的名称

tikz-cd矩阵创建如下

\def\tikzcd@[#1]{%
  \tikzpicture[/tikz/commutative diagrams/.cd,every diagram,#1]%
  % ...
  \matrix[%
    % ...
    ]%
  \bgroup}

因此,似乎没有办法将矩阵命名为由环境创建的tikzcd。有没有办法命名矩阵,同时仍然使用环境tikzcd

这个问题源于需要命名矩阵的单元。name-1-1例如,如果知道矩阵的名称,则可以方便地将单元称为。

答案1

名称已设置,可从宏中检索\tikzcdmatrixname。要进一步绘制tikzcd矩阵,请使用execute at end picture

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{cd}
\begin{document}

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

\end{document}

在此处输入图片描述

答案2

本书作者tikz-cd(Florêncio Neves)亲自建议我使用every matrix/.append style={name=...}(别忘了append,参见 Torbjørn T. 的回答在这里)。这样,您就可以按照自己的意愿命名矩阵。

我还认为可以使用remember pictureandoverlay代替execute at end picture。下面是包含两种情况的 MWE:

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

\begin{document}
\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];
    }]
    A \ar[r]\ar[d] & B \ar[d] \\
    C \ar[r]       & D 
\end{tikzcd}%

\begin{tikzcd}[every matrix/.append style={name=mycd}, remember picture]
    A \ar[r]\ar[d] & B \ar[d] \\
    C \ar[r]       & D 
\end{tikzcd}%
\begin{tikzpicture}[overlay, remember 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];
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容