tikz 中每个子节点都是复杂节点的树

tikz 中每个子节点都是复杂节点的树

尝试创建一棵树,其中每个子节点都是一组可以单独创建的节点,然后以某种方式链接到树中的不同位置。

假设我有一组节点和边,例如

\node (1) at (0,1) {1};
\node (2) at (0,2) {2};
\draw(->, bend left=90, dotted) (1.north) -- (2.north);

我查看了树,发现每个子节点似乎只能是一个节点。例如,我希望能够使用上述三个命令并将它们视为一个子节点(并将相对坐标保留在子节点内)。也许可以使用宏来实现这一点(?),尽管我找不到任何相关示例/文献。

例如,类似下面的内容:

\documentclass{article}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture} 
  \node {root} 
    child {\node (1) at (0,0) {A}; \node (1) at (0,0) {B}};
    child {\node (1) at (0,0) {C}; \node (1) at (0,0) {D} 
      child {\node (1) at (0,0) {C};} 
      child {\node (1) at (0,0) {D};} 
    }; 
\end{tikzpicture}

\end{document}

答案1

我不太清楚你想要什么,但你当然可以将子树写成宏,它应该以 开头child。或者你也可以使用pics。我举三个例子:

样本输出水平

\documentclass{article}

\usepackage{tikz}

\begin{document}

\newcommand{\mysubtree}[2]{child {node {#1}} 
      child {node {#2}}}

\begin{tikzpicture}[level 2/.style={sibling distance=1cm}] 
  \node (R) {root} 
  child {node  {A}
  child {node  {B}}}
  child {node {C} \mysubtree DE}
  child {node {F} \mysubtree GH}; 
\end{tikzpicture}

\end{document}

您可以向这些宏添加相当复杂的代码:

彩色输出样例

\documentclass{article}

\usepackage{tikz}

\begin{document}

\newcommand{\mysubtree}[3]{child {node[red] {#1}
      child {node[draw] {#2}} 
      child[edge from parent path={(\tikzparentnode\tikzparentanchor)
        edge [bend left] (\tikzchildnode\tikzchildanchor)}]
        {node[circle,fill=green] {#3} }}} 


\begin{tikzpicture} 
  \node {root} 
  child {node  {A}
   child {node  {B}
    \mysubtree CDE
    \mysubtree FGH}}; 
\end{tikzpicture}

\end{document}

最后使用pics可能最接近您的要求。您可以简单地放置一个pic而不是一个,node但边缘存在锚定问题,请参见下面最右边的节点。相反,将它们与一个虚拟节点放在一起,该虚拟节点采用适当大小的空白矩形:

样例图片输出

\documentclass{article}

\usepackage{tikz}
\tikzset{ mynode/.pic={
  \node (1) at (-0.25,0) {1};
  \node (2) at (0.25,0) {2};
  \draw[->, bend left=90, dotted] (1.north) -- (2.north);
  },
  mypic/.style={rectangle,minimum size=4ex}
}

\begin{document}

\begin{tikzpicture}
  \node (R) {root} 
  child {node  {A}
  child {node  {B}}}
  child { node[mypic] {} pic {mynode} }
  child { node[mypic] {} pic {mynode} }
  child { pic {mynode} }; 
\end{tikzpicture}

\end{document}

相关内容