我计划说明我使用的四叉树数据结构是如何实现的,并显示所有内部指针和数组。图像看起来会像这样:
(这里,如果一个指针指向符号∅,则表示它是一个空指针,即它的值为0)
我想使用类似的东西这个问题来说明链接是什么样子的。我注意到,这个问题中的代码定义了box
用于绘制由两个元素组成的数组的样式。
我的第一个问题是:何时应使用样式?为什么我链接的问题中的代码不使用宏来绘制表示数组的矩形?
我的第二个问题是:它们是如何工作的?我在pgf 手册(参见第 493-494 页),所以我真的不知道使用样式时到底发生了什么。样式中定义的代码是不是有点像是被复制并粘贴到使用样式的地方,这到底是怎么发生的?
我的第三个问题是:如果使用样式绘制矩形(如本例所示),我该如何绘制矩形,以便根据 x 和 y 的定义相应地缩放?例如,我使用代码开始我的 TikZ 图片。和\begin{tikzpicture}[x={(.035\textwidth,0)},y={(0,.035\textwidth)}]
的值可能因图片而异,绘制的比例也不同。我怎样才能让矩形使用和的值?我试图将我链接到的问题中的代码(即绝对距离)更改为取决于和的距离,但我没有成功。x
y
x
y
inner sep=2ex
x
y
答案1
我认为最好是style
随时随地使用。代码更易读,如果你看一下,pgfkeys
你会发现里面有很多可以使用的可能性styles
。下面你可以找到第一个版本来获得你想要的东西。也许你可以找到一个更好的答案,因为有很多可能性,但你需要以每种方式使用样式。如果有必要,我可以解释下一个代码。
问题 1:总是因为用样式修改图片很容易
可以使用节点样式[x=.5cm,y=.5cm]
来缩放树。scale
更新
\documentclass[11pt]{article}
\usepackage{tikz,amsmath}
\usetikzlibrary{arrows,shapes.multipart,calc}
\begin{document}
\pgfmathsetmacro{\wdbox}{.02\textwidth}
\tikzset{
>= stealth,
every picture/.style={ultra thick},
every node/.style={anchor=north},
simple/.style={draw,minimum size=3*\wdbox,scale=.8},
array/.style={%
draw,scale=.8,
inner sep=\wdbox,
rounded corners,
rectangle,
rectangle split,
rectangle split parts=4,
rectangle split ignore empty parts=false,
rectangle split horizontal,
append after command={%
\pgfextra{\let\mainnode=\tikzlastnode}
coordinate (c1 \mainnode) at ($(\mainnode.west)!.5!(\mainnode.one split)$)
coordinate (c2 \mainnode) at ($(\mainnode.one split)!.5!(\mainnode.two split)$)
coordinate (c3 \mainnode) at ($(\mainnode.two split)!.5!(\mainnode.three split)$)
coordinate (c4 \mainnode) at ($(\mainnode.three split)!.5!(\mainnode.east)$)
}
}
}
\begin{tikzpicture}[x=.035\textwidth,y=.035\textwidth]
\node[simple] (1) {};
\draw[->] (1.center) -- +( 0,-2) node[array] (2) {};
\draw[->] (c1 2) -- +(-3,-2) node[simple] (3) {};
\draw[->] (c2 2) -- +(-1,-2) node[simple] (4) {};
\draw[->] (c3 2) -- +( 0,-2) node (5) {$\emptyset$};
\draw[->] (c4 2) -- +(+3,-2) node[simple] (6) {};
\draw[->] (3.center) -- +( 0,-2) node[array] (7) {};
\draw[->] (4.center) -- +( 0,-2) node (8) {$\emptyset$};
\draw[->] (c1 7) -- +(-3,-2) node[simple] (9) {};
\end{tikzpicture}
\end{document}