尝试创建一棵树,其中每个子节点都是一组可以单独创建的节点,然后以某种方式链接到树中的不同位置。
假设我有一组节点和边,例如
\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}