![在样式中添加节点](https://linux22.com/image/274468/%E5%9C%A8%E6%A0%B7%E5%BC%8F%E4%B8%AD%E6%B7%BB%E5%8A%A0%E8%8A%82%E7%82%B9.png)
我有以下代码,它绘制一个矩阵,然后使用矩阵内的节点创建新节点:
\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
您可以轻松地使用各种样式对单元格中的节点应用样式,它们按应用顺序排列:
every cell
(图例cells
附于every cell
),column <number>
,every odd column
,every even column
,row <number>
,every odd row
,every even row
,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}