何时使用 TikZ 样式?

何时使用 TikZ 样式?

我计划说明我使用的四叉树数据结构是如何实现的,并显示所有内部指针和数组。图像看起来会像这样:

在此处输入图片描述

(这里,如果一个指针指向符号∅,则表示它是一个空指针,即它的值为0)

我想使用类似的东西这个问题来说明链接是什么样子的。我注意到,这个问题中的代码定义了box用于绘制由两个元素组成的数组的样式。

我的第一个问题是:何时应使用样式?为什么我链接的问题中的代码不使用宏来绘制表示数组的矩形?

我的第二个问题是:它们是如何工作的?我在pgf 手册(参见第 493-494 页),所以我真的不知道使用样式时到底发生了什么。样式中定义的代码是不是有点像是被复制并粘贴到使用样式的地方,这到底是怎么发生的?

我的第三个问题是:如果使用样式绘制矩形(如本例所示),我该如何绘制矩形,以便根据 x 和 y 的定义相应地缩放?例如,我使用代码开始我的 TikZ 图片。和\begin{tikzpicture}[x={(.035\textwidth,0)},y={(0,.035\textwidth)}]的值可能因图片而异,绘制的比例也不同。我怎样才能让矩形使用和的值?我试图将我链接到的问题中的代码(即绝对距离)更改为取决于和的距离,但我没有成功。xyxyinner sep=2exxy

答案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} 

相关内容