我是一个新的/初学者 LaTeX 用户,我想制作具有直脊的句法树,有点像这里的:
http://tanvirdhaka.blogspot.com/2010/01/phrase-structure-grammar.html
可以使用 tikz-qtree 完成此操作吗?这是我至今一直在使用的。
编辑:感谢这里的一些回复。我想我有两个问题。第一个“问题”是,当我创建一棵树时,一些树枝(有空节点或叶子)是不均匀的(有角度),因此看起来有点难看。我附上了一些原始代码来说明我的意思。但我认为下面的回复可能会帮助我解决这个问题。
\documentclass[10pt]{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}
\Tree % Ugly tree with uneven branches and different lengths
[.CP
[.{} ]
[.C$'$
[.C ]
[.(?)
[.Neg ]
[.TP
[.{} ]
[.T$'$
[.T ]
[.\textit{v}P
[.AGENT ]
[.\textit{v}$'$
[.\textit{v} ]
[.VP
[.V ]
[.THEME ] ] ] ] ] ] ] ] ] ] ] ] ]
\end{tikzpicture}
\end{document}
我的第二个问题是如何制作一棵从上到下具有连续笔直脊柱的树(请参阅上面我原帖中的第二个链接)。有人知道如何做到这一点吗?
答案1
包裹forest
(基于图形包tikz-pgf
) 可以按如下所示进行配置,为您提供具有对称二进制分支的直脊树。我从您的 MWE 中取出了中间投影(条形级别)标签,以按照您的要求显示通过空节点的直线。
\documentclass[10pt]{article}
\usepackage{tikz}
\usepackage{forest}
\forestset{sn edges/.style={for tree={parent anchor=south, child anchor=north}}}
\forestset{nice empty nodes/.style={for tree={calign=fixed edge angles},
delay={where content={}{shape=coordinate, for parent={for children={anchor=north}}}{}}}}
\usepackage{times}
\begin{document}
\begin{forest}
sn edges, nice empty nodes
[CP
[]
[
[C ]
[(?)
[Neg ]
[TP
[ ]
[
[T ]
[\textit{v}P
[AGENT ]
[
[\vphantom{V}\textit{v} ] % the \vphantom{V} makes the height of the little v node the same as the VP node; without it, the branch to the little v goes too low
[VP
[V ]
[THEME ]
]
]
]
]
]
]
]
]
\end{forest}
\end{document}
样式sn edges
(获取到达父节点下方的分支)和nice empty nodes
(获取直脊和平衡的空节点)取自forest
,但请注意,对于某些字体,使用这些样式可能会导致错误,如我的答案到森林中的 sn 边和漂亮的空节点样式导致除以零。
获得直脊树的另一种方法是直接在 中制作它们tikz
,如图所示这个答案到制作包含和不包含文本节点的混合树。
答案2
tikz-qtree
可以通过明确设置叶节点与树根之间的距离来创建此类图。此类图的最小工作示例如下:
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\begin{document}
% >>> Specify the "frontier"/leaf-level distance from root:
\tikzset{frontier/.style={distance from root=120pt}}
\Tree [.S [.NP [.Det The ]
[.N Man ] ]
[.VP [.V captured ]
[.NP [.Det a ]
[.N bird ] ] ] ]
\end{document}
这使用了tikz-qtree
文档在第 5 页。
结果显示如下:
答案3
forest
是构建句法树的另一种选择。在其文档摘要中,您可以阅读:
Forest 是一个基于 pgf/TikZ 的软件包,用于绘制语言树(和其他类型的树)。其主要特点是:(i) 可以生成非常紧凑的树的打包算法;(ii) 用户友好的界面,由熟悉的树括号编码以及用于选项设置的键值界面组成;(iii) 多种树格式选项,可控制各个节点的选项值及其操作机制;(iv) 可以使用 pgf/TikZ 的全部功能来装饰树;(v) 对代码更改敏感的外部化机制。
前面用 forest 输入的示例是:
\documentclass[border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
where n children=0{tier=word}{}
[S
[NP
[Det [The]]
[N [Man]]
]
[VP
[V [captured]]
[NP
[Det [a]]
[N [bird]]
]
]
]
\end{forest}
\end{document}
答案4
另一种方式tikz
代码
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
[
% Children and edges style
edge from parent/.style={very thick,draw=black!70},
level 1/.style={sibling distance=5.5cm, growth parent anchor=south,},
level 2/.style={sibling distance=3.5cm},
level 3/.style={sibling distance=3.5cm},
level 4/.style={sibling distance=3.5cm}
]
%% Draw events and edges
\node (g1) [] {S}
child{node (e1) {NP} % left branch
child {node (e11) {Det}
child[level distance=3.25cm]{node{The}}}
child {node (e13) {N}
child[level distance=3.25cm]{node{Man}}}
}
child {node (e2) {VP} % right branch
child {node (e21) {V}
child[level distance=3.25cm]{node( ){captured}}
}
child {node (e32) {NP}
child {node (e11) {Det} child{node(a){a}}}
child {node (e13) {N} child{node(b) {bird}}}
}
};
\end{tikzpicture}