tikz-qtree 中节点标签的对齐

tikz-qtree 中节点标签的对齐

我正在尝试绘制一棵反驳树:

\documentclass{article} 

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

\begin{document} 
\begin{tikzpicture} 
     \Tree  
        [.\node[label= {$\langle \texttt{stateA(X)}, 0 \rangle$}] {};    
       [.\node[label= {$\langle \texttt{stateB(X, Y)}, 0 \rangle$}] {};   
            \edge node[left] {$X=a, Y=b$}; [.\node[label={$\langle \texttt{stateC(a,b)}, 0 \rangle$}]  {};   
                 \node[ label=below: {$\langle [], res1 \rangle$}] {};  
                 ]  
            \edge node[right] {$X=a, Y=c$}; [.\node[label={$\langle \texttt{stateD(b, c)}, 0 \rangle$}]  {};  
                 \node[ label=below: {$\langle [], res2 \rangle$}] {};  
                  ]   ]   ] 
\end{tikzpicture} 
\end{document} 

但是,在生成的树中,大多数标签的位置都不正确。我该如何修复这个问题?

最初,我尝试使用这个例子但圆形或矩形似乎不太合适。

答案1

关于你的树的一些评论。

  • 由于每个组成标签自动成为一个节点,因此通常不需要使用明确的\node命令。tikz-qtree[.label ]

  • 要标记树的一条边,您应该使用节点的[auto=left]和参数。这将确保更好地放置标签文本。[auto=right]

  • 当制作复杂的节点标签时,如果为树的不同组件创建一些合理的标记,您的树将更具可读性。

这是考虑到所有这些想法的树的版本:

我创建了一个\brk命令,用于将某些内容括在尖括号中。我还创建了一个\state命令,用于将其参数放在中\texttt。这样,如果您决定更改该格式设置,则只需更改一个命令即可。

\documentclass{article} 

\usepackage{tikz} 
\usepackage{tikz-qtree} 
\newcommand\state[1]{\texttt{#1}}
\newcommand\brk[1]{$\langle #1 \rangle$}
\begin{document} 

\begin{tikzpicture}[level distance=40pt,sibling distance=25mm] 
  \Tree  
     [.{\brk{ \state{stateA(X)}, 0 }}   
        [.{\brk{ \state{stateB(X, Y)}, 0 }}  
            \edge node[auto=right] {$X=a, Y=b$}; 
            [.{\brk{ \state{stateC(a,b)}, 0 }}   
                 [.{\brk{ [], res1 }} ]  
                 ]  
            \edge node[auto=left] {$X=a, Y=c$}; [.{\brk{ \state{stateD(b, c)}, 0 }}  
                 [.{\brk{ [], res2 }} ]  
                  ]   ]   ] 
\end{tikzpicture} 
\end{document} 

代码输出

相关内容