我想到最好的办法是画一个分割矩形,样式如下
\tikzset{
entry/.style={
draw,
rectangle split,
rectangle split parts=2,
}
(取自这里)。但是除了每次创建一个额外的节点并正确定位它之外,我找不到添加第三部分的优雅方法。我希望能够使用像这样的一行代码创建节点\node [entry] (A) {1001 \nodepart{second} 1010 \nodepart{third} 2};
,但我不确定如何去做。
答案1
好吧,如果您愿意对语法和一些黑客行为进行轻微改变,您可以通过滥用 TikZ 的label
、pin
和append 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}
需要注意的是,在放置构造时,您不能使用额外节点的锚点。此外,此节点的内容是样式的选项,而不是真正的节点部分。