![使用 TiKZ 绘制树时如何修改树枝之间的距离?](https://linux22.com/image/239715/%E4%BD%BF%E7%94%A8%20TiKZ%20%E7%BB%98%E5%88%B6%E6%A0%91%E6%97%B6%E5%A6%82%E4%BD%95%E4%BF%AE%E6%94%B9%E6%A0%91%E6%9E%9D%E4%B9%8B%E9%97%B4%E7%9A%84%E8%B7%9D%E7%A6%BB%EF%BC%9F.png)
我想在使用 TiKZ 包绘制树时修改父节点和子节点之间的距离。我查看了 TiKZ 站点上的示例,并添加了一个名为的属性sibling distance
。但是,无论我在哪里添加(父节点和子节点),它都指向错误的位置。
我们可以看到,如果我向节点 中添加更多子节点2
,它将与 重叠5
。添加sibling distance
甚至会导致更糟糕的结果:
我不知道是什么原因导致了这个问题。有什么想法吗?谢谢。
最小示例
\documentclass[a4paper,landscape]{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[auto]
\node [circle,draw] (z){0}
child { [sibling distance=10mm]
node[circle,draw] (a) {1}
child {
node[circle,draw] (c) {5}
}
child {
node[circle,draw] (d) {5}
}
child {
node[circle,draw] (e) {5}
}
child {
node[circle,draw] (f) {5}
}
}
child {
node[circle,draw] (b) {2}
}
;
\path (z) -- (a);
\path (z) -- (b);
\path (a) -- (c);
\end{tikzpicture}
\end{document}
答案1
您可以使用以下方式单独更改sibling distance
树的每个级别的level <number>/.style={sibling distance=<value>}
:
\documentclass[a4paper,landscape]{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
auto,
level 1/.style={sibling distance=40mm},
level 2/.style={sibling distance=10mm}]
\node [circle,draw] (z){0}
child {
node[circle,draw] (a) {1}
child {
node[circle,draw] (c) {5}
}
child {
node[circle,draw] (d) {5}
}
child {
node[circle,draw] (e) {5}
}
child {
node[circle,draw] (f) {5}
}
}
child {
node[circle,draw] (b) {2}
}
;
\end{tikzpicture}
\end{document}
答案2
您无需手动设置所有这些,而是可以tikz-qtree
非常轻松地构建这些类型的树,并且它会自动调整兄弟距离。(我稍微扩大了默认兄弟距离;但不需要其他手动更改。)
\documentclass{article}
\usepackage{tikz-qtree}
\begin{document}
\tikzset{edge from parent/.style=
{draw, edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}}}
\begin{tikzpicture}[every tree node/.style={draw,circle},sibling distance=.25cm]
\matrix{
\Tree
[.0
[.1 5 5 5 5 ]
[.2 ]
]
&
\Tree [.0
[.1 5 5 5 5 5 5 ]
[.2 6 6 ]
]
\\};
\end{tikzpicture}
\end{document}
答案3
随着istgame
包,您可以使用\xtdistance{<lev-dist>}{<sib-dist>}
它来改变级别距离和兄弟距离。
\documentclass{standalone}
\usepackage{istgame}
\begin{document}
\begin{istgame}
\setistOvalNodeStyle{5mm}
\xtShowEndPoints[oval node]
\xtdistance{10mm}{20mm}
\istrooto(0){0}
\istb
\istb{}{2}[center]
\endist
\xtdistance{10mm}{7mm}
\istrooto(1)(0-1){1}
\istb{}{5}[center]
\istb{}{5}[center]
\istb{}{5}[center]
\istb{}{5}[center]
\endist
\end{istgame}
\end{document}