这是来自这个问题的评论中的一个问题:
使用 tikz-qtree 在句法树的各个部分周围绘制框架或框
我没有得到任何对我的评论的答复,这就是为什么我现在要问一个新问题;不确定这是否是正确的做法。
我正在尝试让下面的 TikZ 树的边缘连接到叶子周围的节点(或:框)。例如,边缘Top Node
应该从节点的底部连接tn
到两个节点的顶部lhl1s
,rhl1s
等等,一直穿过树。目前,边缘到达叶子内部。
我的直觉是,我根本不应该为此使用树 - 或者有没有一种简单的方法可以做到这一点\Tree
?
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usetikzlibrary{fit}
\begin{document}
\begin{figure}[h!]
\begin{center}
\begin{tikzpicture}[every tree node/.style={align=center,anchor=north},level 2+/.style={level distance=1.25cm,sibling distance=30mm}]
\Tree [.\node(tn){Top Node};
[.\node(lhl1s){Left-Hand Level 1 Sister};
]
[.\node(rhl1s){Right-Hand Level 1 Sister};
[.\node(rhl2s1){Right-Hand Level 2 Sister};
]
[.\node(rhl2s2){Right-Hand Level 2 Sister};
]
]
]
\node[draw,fit=(tn)]{};
\node[draw,fit=(lhl1s)]{};
\node[draw,fit=(rhl1s)]{};
\node[draw,fit=(rhl2s1)]{};
\node[draw,fit=(rhl2s2)]{};
\end{tikzpicture}
\caption{A TikZ Tree}
\label{tikz-tree}
\end{center}
\end{figure}
\end{document}
答案1
draw
我认为使用树没有什么问题,但是不需要添加所有额外的节点来绘制框,只需通过添加样式来绘制树中默认节点的边框即可every tree node
。
(我从center
环境改为\centering
,参见我应该对图形和表格使用 center 还是 centering ?)
正如 cfr 在评论中提到的,由于各个节点中的文本(可能)具有不同的高度和深度,这会导致框的高度有所不同。您可以通过text height=2ex,text depth=0.5ex
在every tree node
样式(对于tikz-qtree
)或for tree={..}
(对于forest
,下面)中添加类似内容来解决这个问题。但是,您也可以有点狡猾,而是使用font=\strut
。
\documentclass{article}
\usepackage{tikz-qtree}
\begin{document}
\begin{figure}[ht!]
\centering
\begin{tikzpicture}[
every tree node/.style={
draw, %%% added
% inner sep=5pt, % if you want more space inside the nodes
align=center,
anchor=north,
font=\strut},
level 2+/.style={
level distance=1.25cm,
sibling distance=10mm}]
\Tree [.{Top Node}
[.{Left-Hand Level 1 Sister}
]
[.{Right-Hand Level 1 Sister}
[.{Right-Hand Level 2 Sister}
]
[.{Right-Hand Level 2 Sister}
]
]
]
\end{tikzpicture}
\caption{A TikZ Tree}
\label{tikz-tree}
\end{figure}
\end{document}
使用forest
默认情况下你会得到一个更紧凑的树:
\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{figure}[ht!]
\centering
\begin{forest}
for tree={draw,font=\strut}
[Top Node
[Left-Hand Level 1 Sister]
[Right-Hand Level 1 Sister
[Right-Hand Level 2 Sister
]
[Right-Hand Level 2 Sister]
]
]
\end{forest}
\caption{A forest Tree}
\label{tikz-tree}
\end{figure}
\end{document}