我想构建一个包含多个不同类型节点的矩阵。在我的示例中,有一个包含两个“模块”和一个“标签”的矩阵。为了方便起见,我想使用matrix of nodes
with,nodes={module}
因为模块比标签多。现在,如果我想设置标签的样式,我通常会使用|[label]|
如下方法:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
module/.style={draw, rectangle, fill=white, minimum width=4cm, minimum height=0.8cm},
label/.style={ }
}
\begin{document}
\begin{tikzpicture}
\matrix[fill=black!20, matrix of nodes, nodes={module}]
{
|[label]| Label \\ % this doesn't produce the desired output
Module 1 \\
Module 2 \\
};
\end{tikzpicture}
\end{document}
得出的结果为:
当然,我可以明确指定每个节点,但这似乎很麻烦。有没有更好的解决方案?
答案1
正如label
TikZ 中预定义的样式一样,对于我的回答,我将使用mymodule
和mylabel
代替module
和label
。
这里发生的事情是,当您放置nodes={mymodule}
然后|[mylabel]|
,单元格的样式就等同于|[mymodule,mylabel]|
。因此,如果mylabel/.style={}
最终您的单元格的样式与所有其他单元格的样式相同|[mymodule]|
。
正如@user43963在其评论中所说,您必须覆盖不再需要的属性。就像这样:
\documentclass[varwidth,border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
mymodule/.style={draw, rectangle, fill=white, minimum width=4cm, minimum height=0.8cm},
mylabel/.style={draw=none,fill=none}
}
\begin{document}
\begin{tikzpicture}
\matrix[fill=black!20, matrix of nodes, nodes={mymodule}]
{
|[mylabel]| Label \\ % this produce the different output
Module 1 \\
Module 2 \\
};
\end{tikzpicture}
\end{document}
答案2
如果label
节点只是添加到某些module
节点的标签,则不需要新的样式,只需label
在相应节点中包含一个选项即可。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
module/.style={draw, rectangle, fill=white, minimum width=4cm, minimum height=0.8cm},
}
\begin{document}
\begin{tikzpicture}
\matrix[fill=black!20, matrix of nodes, nodes={module}, row sep=-\pgflinewidth]
{
|[label=Label]|Module 1 \\
Module 2 \\
};
\end{tikzpicture}
\end{document}
注意:row sep=-\pgflinewidth
已添加以避免行之间的线为双倍粗细。