创建具有不同高度部分的分割矩形节点

创建具有不同高度部分的分割矩形节点

我正在尝试找到一个优雅的解决方案来制作一堆像这样的形状带有附加节点的分割矩形

我想到最好的办法是画一个分割矩形,样式如下

\tikzset{
entry/.style={
    draw,
    rectangle split,
    rectangle split parts=2,
}

(取自这里)。但是除了每次创建一个额外的节点并正确定位它之外,我找不到添加第三部分的优雅方法。我希望能够使用像这样的一行代码创建节点\node [entry] (A) {1001 \nodepart{second} 1010 \nodepart{third} 2};,但我不确定如何去做。

答案1

好吧,如果您愿意对语法和一些黑客行为进行轻微改变,您可以通过滥用 TikZ 的labelpinappend after command选项来创建科学怪人节点。

rectangle split形状已经接近您想要的形状。但是,它不允许对分隔符使用不同的线条样式。但是,我们可以完全阻止绘制分隔符并提供我们自己的路径。这是使用 中的边缘操作完成的append after command

可以使用label选项绘制附加的矩形。正确定位它需要移动,以便边框相互重叠,这是通过选项完成的outer xsep。为了允许引用这个新节点的锚点,我们还给它起了一个名字,这个名字是由主节点的名称构成的。

以下是 MWE:

\documentclass[border=1mm,tikz]{standalone}
\usetikzlibrary{shapes.multipart}

\tikzset{entry/.style={
    % appearance settings for the main node
    draw,
    rectangle split,
    rectangle split parts=2,
    rectangle split draw splits=false,
    % draw the small attached node
    label={[name=label of \tikzlastnode,anchor=north west,draw,outer xsep=-.5\pgflinewidth]north east:#1},
    % draw the split using a dashed line
    append after command={(\tikzlastnode.text split west) edge[draw,dashed] (\tikzlastnode.text split east)},
}}

\begin{document}
    \begin{tikzpicture}
        \node[entry=2] (myentry) at (0,0) {1001 \nodepart{second} 1010};

        % examples of how we can refer to coordinates of this monster
        \node[coordinate,pin=4:a] at (label of myentry.south east) {};
        \node[coordinate,pin=4:b] at (myentry.south east) {};
    \end{tikzpicture}
\end{document}

输出

需要注意的是,在放置构造时,您不能使用额外节点的锚点。此外,此节点的内容是样式的选项,而不是真正的节点部分。

相关内容