我正在尝试直接在 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-qtree
TikZ库的解决方案,它为此类树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}