tikz-qtree 中的水平层次树:较长的节点名称的布局不好

tikz-qtree 中的水平层次树:较长的节点名称的布局不好

我正在尝试直接在 LaTeX 中设置一些层次树,发现tikz-qtree这对这项任务非常有帮助。

由于节点和子节点的描述是相当长的单词,因此在垂直树中的布局似乎不是最佳的。

此外,我会将这些树合并为一棵更大的树,然后事物就会开始变得拥挤。

所以,我想到了一个水平树。它们也很不错。但我就是无法让它们正常工作。

手册tikz-qtree非常短,其中包含的示例节点仅由少量字母组成。

我想要实现的效果类似于第一棵树,但“旋转”了 90°。节点和子节点的标题会很长(有时会有好几个字),最后总共会有三层。

仅仅让第一棵树向右生长是不够的。:) 在哪里可以找到有关“父路径边”参数属性的文档?我在手册中tikz也没有找到它们。

我也研究了常规的tikz-​​package,但是遇到了类似的问题。tikz-qtree有一个更漂亮的语法,所以我坚持使用它。也许类似的东西dirtree更适合?

无论如何,这是一个最小的工作示例:

\documentclass{article}

\usepackage{tikz}
\usepackage{tikz-qtree}

\begin{document}

Nice vertical tree. Bad for lots of subcategories.
\begin{figure}[h!]
\centering
\begin{tikzpicture}
\tikzset{edge from parent/.style= 
            {thick, draw,
                edge from parent path={(\tikzparentnode.south)
                                        -- +(0,-8pt)
                                        -| (\tikzchildnode)}}}
\Tree 
    [. parent 
        [. {nice child0} ]
        [. child1 ] 
        [. child2 ]
        [. child3 ]
    ]
\end{tikzpicture}
\end{figure}

Vertical tree with different growth direction. Doesn't look quite right. o\_O
\begin{figure}[h!]
\centering
\begin{tikzpicture}
\tikzset{grow'=right, edge from parent/.style= 
            {thick, draw,
                edge from parent path={(\tikzparentnode.east)
                                        -- +(0,-8pt)
                                        -| (\tikzchildnode)}}}
\tikzset{every tree node/.style={anchor=base west}} 
\Tree 
    [. parent 
        [. {nice child0} ]
        [. child1 ] 
        [. child2 ]
        [. child3 ]
    ]
\end{tikzpicture}
\end{figure}

Nice horizontal tree. Good for lots of subcategories, but `wrong' edges.
\begin{figure}[h!]
\centering
\begin{tikzpicture}
\tikzset{grow'=right,level distance=32pt} 
\tikzset{execute at begin node=\strut} 
\tikzset{every tree node/.style={anchor=base west}} 
\Tree   
    [.p
        [.c0 ]
        [.c1 ]
        [.c2 ]
        [.c3 ]
    ]
\end{tikzpicture} 
\end{figure}

Almost identical horizontal tree as above, but messed up layout for longer node-names. 
\begin{figure}[h!]
\centering
\begin{tikzpicture}
\tikzset{grow'=right,level distance=32pt} 
\tikzset{execute at begin node=\strut} 
\tikzset{every tree node/.style={anchor=base west}} 
\Tree   
    [.parent
        [.c1 ]
        [.c2 ]
    ]
\end{tikzpicture} 
\end{figure}

\end{document}

谢谢你们的指点和帮助!

答案1

这是一个使用tikz-qtreeTikZ库的解决方案,它为此类树trees提供了预制路径。edge from parent fork right

\documentclass{article}

\usepackage{tikz}
\usepackage{tikz-qtree}
\usetikzlibrary{trees} % this is to allow the fork right path

\begin{document}

\begin{tikzpicture}[grow'=right,level distance=1.25in,sibling distance=.25in]
\tikzset{edge from parent/.style= 
            {thick, draw, edge from parent fork right},
         every tree node/.style=
            {draw,minimum width=1in,text width=1in,align=center}}
\Tree 
    [. parent 
        [.{nice child0}
                [.{grandchild0-0 } ]
            [.{grandchild0-1 } ]
            [.{grandchild0-2 } ]
            [.{grandchild0-3 } ]
        ]
        [.child1
                [.{grandchild1-0 } ]
            [.{grandchild1-1 } ]
            [.{grandchild1-2 } ]
        ] 
        [.child2 ]
        [.child3 ]
    ]
\end{tikzpicture}
\end{document}

代码输出

相关内容