![Tikz 树中的大节点导致重叠](https://linux22.com/image/332415/Tikz%20%E6%A0%91%E4%B8%AD%E7%9A%84%E5%A4%A7%E8%8A%82%E7%82%B9%E5%AF%BC%E8%87%B4%E9%87%8D%E5%8F%A0.png)
在上一个问题中节点数量过多导致重叠,我愚蠢地尝试使用 Node 创建树。这种方法导致随着树变大,节点重叠。用户 Ignasi 建议我使用Tikz 树反而。
在这里,我已切换到使用 tikz 树,但遇到了同样的问题。请查看屏幕截图并尝试使用 MWE(使用编译pdflatex),请告知我该如何解决这个问题。
编辑包括屏幕截图和 MWE
\documentclass{article}
\usepackage{tikz}
\usepackage{adjustbox} %shrink Tikz or figures
\usepackage{pdflscape} %landscape Tikz image
\usetikzlibrary{positioning,shadows,shapes,arrows}
\begin{document}
\begin{landscape}
\begin{center}
\begin{adjustbox}{max size={\textwidth}{\textheight}}
\begin{tikzpicture}[sibling distance=10em, every node/.style = {shape=rectangle, rounded corners, draw, align=center, top color=white, bottom color=blue!20}]
\node {Blablabla}
child { node {Blablabla} }
child { node {Blablabla} }
child { node {Blablabla}
child { node {Blablabla} }
child { node {Blablabla} }
child { node {Blablabla}
child { node {Blablabla}
child { node {Blablabla} }
child { node {Blablabla} }
child { node {Blablabla}
child { node {Blablabla}
child { node {Blablabla}
child { node {Blablabla} }
}
}
child { node {Blablabla}
child { node {Blablabla} }
}
}
child { node {Blablabla}
child { node {Blablabla} }
}
}
child { node {Blablabla}
child { node {Blablabla}
child { node {Blablabla} }
child { node {Blablabla} }
child { node {Blablabla}
child { node {Blablabla}
child { node {Blablabla} }
child { node {Blablabla} }
}
child { node {Blablabla}
child { node {Blablabla}
child { node {Blablabla}
child { node {Blablabla}}}}}}}}}};
\end{tikzpicture}
\end{adjustbox}
\end{center}
\end{landscape}
\end{document}
编辑:图片 2以下是带有独特文本的屏幕截图,以便更容易区分节点的排列方式
編輯:MWE 2这是新的最小工作示例,展示了独特的文本
\documentclass{article}
\usepackage{tikz}
\usepackage{adjustbox} %shrink Tikz or figures
\usepackage{pdflscape} %landscape Tikz image
\usetikzlibrary{positioning,shadows,shapes,arrows}
\begin{document}
\begin{landscape}
\begin{center}
\begin{adjustbox}{max size={\textwidth}{\textheight}}
\begin{tikzpicture}[sibling distance=10em, every node/.style = {shape=rectangle, rounded corners, draw, align=center, top color=white, bottom color=blue!20}]
\node {Blablabla1}
child { node {Blablabla2} }
child { node {Blablabla3} }
child { node {Blablabla4}
child { node {Blablabla5} }
child { node {Blablabla6} }
child { node {Blablabla7}
child { node {Blablabla8}
child { node {Blablabla9} }
child { node {Blablabla10} }
child { node {Blablabla11}
child { node {Blablabla12}
child { node {Blablabla13}
child { node {Blablabla14} }
}
}
child { node {Blablabla15}
child { node {Blablabla16} }
}
}
child { node {Blablabla17}
child { node {Blablabla18} }
}
}
child { node {Blablabla19}
child { node {Blablabla20}
child { node {Blablabla21} }
child { node {Blablabla22} }
child { node {Blablabla23}
child { node {Blablabla24}
child { node {Blablabla25} }
child { node {Blablabla26} }
}
child { node {Blablabla27}
child { node {Blablabla28}
child { node {Blablabla29}
child { node {Blablabla30}}}}}}}}}};
\end{tikzpicture}
\end{adjustbox}
\end{center}
\end{landscape}
\end{document}
答案1
Forest 尤其擅长绘制紧凑型树,并能自动排列树,使节点和边(在绝大多数情况下)不会发生碰撞。当然,它不会神奇地让大东西适合小盒子,但它会确保大东西从足够大的盒子开始。
例如:
\documentclass[border=10pt,tikz,multi]{standalone}
\usepackage[edges]{forest}
\begin{document}
\begin{forest}
for tree={
rounded corners,
draw,
align=center,
top color=white,
bottom color=blue!20,
},
forked edges,
[a
[b]
[c]
[d
[e]
[f]
[g
[h
[j]
[k]
[l]
[m[y][z]]
]
[i
[n
[h
[j]
[k]
[l]
[m[y][z]]
]
]
[o
[q
[h
[j]
[k]
[l]
[m[y][z]]
]
]
[r[s[t[u
[v]
[w]
[x]
]]]]
]
[p
[q[u
[v]
[w]
[x]
]]
[r[s[t[u
[v]
[w]
[x]
]]]]
]
]
]
]
]
\end{forest}
\end{document}
或者,对于问题中的示例文本,结构相同但节点内容相同:
\begin{forest}
for tree={
rounded corners,
draw,
align=center,
top color=white,
bottom color=blue!20,
},
forked edges,
[Blablabla
[Blablabla]
[Blablabla]
[Blablabla
[Blablabla]
[Blablabla]
[Blablabla
[Blablabla
[Blablabla]
[Blablabla]
[Blablabla]
[Blablabla[Blablabla][Blablabla]]
]
[Blablabla
[Blablabla
[Blablabla
[Blablabla]
[Blablabla]
[Blablabla]
[Blablabla[Blablabla][Blablabla]]
]
]
[Blablabla
[Blablabla
[Blablabla
[Blablabla]
[Blablabla]
[Blablabla]
[Blablabla[Blablabla][Blablabla]]
]
]
[Blablabla[Blablabla[Blablabla[Blablabla
[Blablabla]
[Blablabla]
[Blablabla]
]]]]
]
[Blablabla
[Blablabla[Blablabla
[Blablabla]
[Blablabla]
[Blablabla]
]]
[Blablabla[Blablabla[Blablabla[Blablabla
[Blablabla]
[Blablabla]
[Blablabla]
]]]]
]
]
]
]
]
\end{forest}
显然,您可以将其放在比例框或其他任何位置,尽管这几乎不被推荐并且可能会使树变得不可读。