带有象形文字装饰的嵌套节点类

带有象形文字装饰的嵌套节点类

我想知道如何定义自定义 TikZ 节点类mynode以允许我使用以下语法:

\node [mynode,fill=yellow!40] {component}
      \child{
           \node [mynode,fill=yellow!40] {subcomponent}
      };

并给出以下结果:

决心

答案1

这可能也可以通过树来实现(child),但我首先想到的是rectangle split节点。

左节点模仿了我试图实现的目标,甚至不太好,因为内部节点用于计算边界框(这是我必须border=8pt为该类设置的原因standalone)。

因此,要拥有一个节点节点<Outer Name><Inner Name>您只需编写通常的代码:

<path> node[subcomponent=<Inner Name>] {Outer Name} <path>;

或者

\node[subcomponent=<Inner Name>] {Outer Name};

内部节点增加了一个额外内容,如果使用fill=none该密钥则可以看到其结果。opacity

如果右上角也出现这样的小图标,您应该提供代码或示例,因为它可能需要一点努力\tikzlastnode

代码

\usetikzlibrary{shapes.multipart}
\tikzset{
    mycomponent/.style={
        draw,
        fill=yellow!40,
        rectangle split,
        rectangle split parts=2,
        rectangle split allocate boxes=2,
        rectangle split empty part height=4ex,
        rectangle split empty part width=0ex,
    },
    subcomponent/.style={
        mycomponent,
        measure me={#1},
        rectangle split every empty part={},% resets empty-part macro
                                            % see http://tex.stackexchange.com/a/88700
        rectangle split empty part height={max(4ex,\qrrInnerNodeHeight)},
        rectangle split empty part width=\qrrInnerNodeWidth,
        append after command={
            node[mycomponent,fill=none,anchor=south west] at (\tikzlastnode.two) {#1}
        }
    },
    measure me/.code={%
        \global\sbox0{\tikz[baseline=0pt]\node[mycomponent,anchor=south]{#1};}%
        \edef\qrrInnerNodeWidth{\the\wd0}%
        \edef\qrrInnerNodeHeight{\the\ht0}%
    },
}
\begin{document}
\begin{tikzpicture}
\node [mycomponent] {%
    Component
    \nodepart{two}
    \tikz{\node[mycomponent] {Subcomponent};}
    };
    \node [xshift=3cm,subcomponent=Subcomponent] (t) {Component};
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容