推翻矩阵中的全局节点样式

推翻矩阵中的全局节点样式

我想构建一个包含多个不同类型节点的矩阵。在我的示例中,有一个包含两个“模块”和一个“标签”的矩阵。为了方便起见,我想使用matrix of nodeswith,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

正如labelTikZ 中预定义的样式一样,对于我的回答,我将使用mymodulemylabel代替modulelabel

这里发生的事情是,当您放置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已添加以避免行之间的线为双倍粗细。

相关内容