长 tikz-qtree 分支中的“扭结”

长 tikz-qtree 分支中的“扭结”

我对 还不熟悉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}

代码输出

相关内容