我对 还不熟悉tikz-qtree
,找不到一种自动的方式来完成 qtree 做得很好的事情。使用qtree
,如果您没有单个中间节点的标签,您将得到一条从祖母到孙女的直线。使用tikz-qtree
,您会得到一个“扭结”。比较以下内容:
和qtree
:
\documentclass{article}
\usepackage{qtree}
\begin{document}
\Tree [ Wiiiiiiiiiide [ nar- -row ] ]
\Tree [ nrw [ wiiiiiiiiiiiii- -iiiiiiiiiiiide ] ]
\end{document}
和tikz-qtree
\documentclass{article}
\usepackage{tikz,tikz-qtree}
\begin{document}
\Tree [ Wiiiiiiiiiide [ nar- -row ] ]
\Tree [ nrw [ wiiiiiiiiiiiii- -iiiiiiiiiiiide ] ]
\end{document}
有什么方法可以得到漂亮的直线吗tikz-qtree
?还是我必须手动调整?提前谢谢。
答案1
没有真正好的方法来处理树干上的空节点,因为它使用了一种非常不同的方法来绘制树。您可以通过将叶节点的设置为基于最长节点的常数(或如果您愿意,也可以设置为某个固定值)来tikz-qtree
解决宽度问题。text width
另一种方法是使用forest
包,它也有一些非常好的功能。我已将树的森林版本添加到示例中以供比较。两者都不完美,但这是由于它们都旨在制作整体上更漂亮的树,而空节点问题是一个不幸的副作用。
\documentclass{article}
\usepackage{tikz-qtree,tikz-qtree-compat}
\usepackage{calc}
\newlength{\tmplen}
\settowidth{\tmplen}{Wiiiiiiiiiide}
\tikzset{every leaf node/.style={
text width=\tmplen},
every node/.style={parent anchor=center, child anchor=north,text depth=4ex}}
\usepackage{forest}
\forestset{nice empty nodes/.style={
for tree={calign=fixed edge angles},
delay={where content={}{shape=coordinate,for parent={for children={child anchor=north}}}{}} }}
\begin{document}
\texttt{tikz-qtree}
\Tree [ Wiiiiiiiiiide [ nar- -row ] ]
\Tree [ nrw [ wiiiiiiiiiiiii- -iiiiiiiiiiiide ] ]
\texttt{forest}
\begin{forest}
[,nice empty nodes [Wiiiiiiiiiide] [ [nar-] [-row] ] ]
\end{forest}
\begin{forest}
[,nice empty nodes [nrw] [ [wiiiiiiiiiiiii-] [-iiiiiiiiiiiide] ] ]
\end{forest}
\end{document}