在样式中添加节点

在样式中添加节点

我有以下代码,它绘制一个矩阵,然后使用矩阵内的节点创建新节点:

\documentclass{standalone}

\usepackage{tikz}

\usetikzlibrary{matrix}
\usetikzlibrary{backgrounds}
\usetikzlibrary{fit}

\begin{document}

\begin{tikzpicture}
\matrix (m) [matrix of nodes] {
1 & 2 \\
3 & 4 \\
};


%% BEGIN
\begin{pgfonlayer}{background}
  \node [fit = (m-1-1) (m-1-2), fill=red!7, inner sep=0pt] {};
\end{pgfonlayer}

\node [below of = m-2-2] {foo};
%% END


\end{tikzpicture}

\end{document}

我正在尝试创建一种样式(此处称为fill first cell),它将在使用时在 BEGIN 和 END 之间添加代码,如下所示:

\matrix (m) [matrix of nodes, fill first cell] {...};

我的几次尝试都没有成功。

我尝试使用,append after command但这导致我的矩阵被绘制了两次。我认为这是因为我实际上并没有继续一条路径,而是在创建新的路径。

我很确定,如果我使用 pgf 命令复制库的角色,我可以让这个示例工作fit。但是这会非常冗长,并且不太容易阅读/修改。

有没有办法既拥有样式提供的简洁界面,又拥有 tikz 的强大功能?我的意思是,我能否在样式中实例化依赖于矩阵节点的 TikZ 节点。

答案1

您可以轻松地使用各种样式对单元格中的节点应用样式,它们按应用顺序排列:

  1. every cell(图例cells附于every cell),
  2. column <number>
  3. every odd column
  4. every even column
  5. row <number>
  6. every odd row
  7. every even row
  8. row <row number> column <column number>

我相信您正在寻找最后一个,即row 1 column 1

\tikzset{
  fill first cell/.style={
    row 1 column 1/.append style={
      nodes={fill=#1}}},
  fill first cell/.default=red!7
}

您可以定义一种样式fill first cell,将其添加fill=red!7到矩阵第一个单元格中的节点。您还可以使用可选值来代替默认red!7颜色。

如果您确实想使用您的组合,您可以append after command像下面的示例一样将一个添加到矩阵中。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{matrix,fit,backgrounds}
\tikzset{
  fill first cell/.style={
    append after command={
      \pgfextra
        \pgfonlayer{background}
          \tikzset{every node/.style=}
          \node[fit=(\tikzlastnode-1-1), inner sep=+0pt, fill=#1] {};
        \endpgfonlayer
      \endpgfextra
    }
  },
  fill first cell/.default=red!7
}
\begin{document}
\begin{tikzpicture}
\matrix (m) [matrix of nodes, fill first cell] {
  1 & 2 \\
  3 & 4 \\
};
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容