使用 tikz-qtree 的复杂节点

使用 tikz-qtree 的复杂节点

我正在尝试转换我的tree-dvips树转换为与 xelatex 兼容的东西。我查看了tikz-qtree包,但似乎无法设置复杂节点。

在旧qtree包中,有一个我可以使用的低级语法(leaf、branch 等),但这似乎已经消失了。在 中,tree-dvips我只需将复杂的东西放在 中\node{...},但我该如何使用 来做到这一点tikz-qtree

\documentclass{scrbook}

\usepackage{tikz-qtree}

\begin{document}

This is some text and the figure should be the size of the text not larger and not smaller.
\begin{figure}[h]
\begin{tikzpicture}
\Tree[.{V[\begin{tabular}[t]{@{}l@{}}
             spr eliste,\\
             comps eliste ]
             \end{tabular}} [.NP dogs ] [.V sleep] ]
\end{tikzpicture}

\end{figure}

This is some text and the figure should be the size of the text not larger and not smaller.

\end{document}

编辑:尝试不使用表格环境,但添加左/北选项会给我带来奇怪的结果。看看下图中的“人”。它太北了。

\documentclass{scrbook}

\usepackage{tikz-qtree}
\tikzset{every tree node/.style={align=left, anchor=north}}

\begin{document}

\begin{tikzpicture}
\tikzset{level 1+/.style={level distance=3\baselineskip}}
\tikzset{frontier/.style={distance from root=12\baselineskip}}
\Tree[.{V[{\sc comps} { }]}
          [.{{1} NP} man ]
          [.{V[{\sc comps} { {1} }]} 
               [.{{2} NP} ketābāro ]
               [.{V[{\sc comps} { {1}, {2} }]}
                    [.{{3} PP} \edge[roof]; {be Sepide} ]
                    [.{V[{\sc comps} { {1}, {2}, {3} }]} dādam ]
               ]
          ]
]
\end{tikzpicture}

\end{document} 

答案1

我不确定这是否是你想要实现的:

\documentclass{scrbook}
\usepackage{tikz-qtree}

\begin{document}

This is some text and the figure should be the size of the text not larger and not smaller.

\begin{figure}[!ht]
\begin{tikzpicture}
\Tree [.V [.{\begin{tabular}[t]{@{}l@{}} spr eliste \\ comps eliste \end{tabular}} ] [.N tree ] ]
\end{tikzpicture}
\end{figure}

This is some text and the figure should be the size of the text not larger and not smaller.

\end{document}

在此处输入图片描述

答案2

没有必要将复杂的节点包装在tabular环境中。只要您为节点中的文本指定明确的对齐方式,TikZ 就允许节点包含换行符。

因此,将以下行添加到您的文档中:

\tikzset{every tree node/.style={align=left, anchor=north}}

或者

\tikzset{every tree node/.style={align=center, anchor=north}}

而且您根本不需要使用表格。

\documentclass{scrbook}

\usepackage{tikz-qtree}
\tikzset{every tree node/.style={align=left, anchor=north}}
\begin{document}

\Tree [.V [.{[spr eliste \\ comps eliste]} ] [.NP dogs ] [.V sleep ] ] 

\end{document}

代码输出

对于您的编辑,使用anchor=north如果您需要节点在基线上排列,则使用不适合树的终端节点。(我通常不会以这种方式绘制树木,所以我没有考虑太多。)

您可以使用以下方法解决此问题:

\tikzset{every internal node/.style={align=left, anchor=north}}

或者

\tikzset{every internal node/.style={align=center, anchor=north}}

internal node密钥针对树中的所有非终端。

相关内容