使 TikZ 节点连接到 TikZ 树边

使 TikZ 节点连接到 TikZ 树边

这是来自这个问题的评论中的一个问题:

使用 tikz-qtree 在句法树的各个部分周围绘制框架或框

我没有得到任何对我的评论的答复,这就是为什么我现在要问一个新问题;不确定这是否是正确的做法。

我正在尝试让下面的 TikZ 树的边缘连接到叶子周围的节点(或:框)。例如,边缘Top Node应该从节点的底部连接tn到两个节点的顶​​部lhl1srhl1s等等,一直穿过树。目前,边缘到达叶子内部。

我的直觉是,我根本不应该为此使用树 - 或者有没有一种简单的方法可以做到这一点\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.5exevery 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}

在此处输入图片描述

相关内容