我目前正在学习语法课程,我希望我的作业符合教授的惯例,即忽略每个标记与其类别标签之间的边缘(因为他说边缘对应于 PSG 规则的应用,这忽略了词汇解析)。有没有办法使用 qtree/tikz-qtree 创建语法树,以便对于叶节点,每个原子与其类别标签之间没有边缘?(我说原子而不是单词,因为像英语属格这样棘手的情况,'s
它表现为限定词而不是单纯的词缀)
举个例子,近似于此(虽然显然格式化为实际语法树)。标签和标记之间有间隙也是可以的,因为我避免边缘/分支而不是喜欢距离(虽然在一定程度上小间隙是可取的)
DP
/ \
D NP
the |
N'
|
N
book
答案1
使用tikz-qtree
:
\documentclass[12pt]{standalone}
\usepackage{tikz-qtree,tikz-qtree-compat}
\tikzset{every tree node/.style={align=center,anchor=north}}
\begin{document}
\Tree
[.TP
[.DP [.D\\the ] [.NP [.N\\man ]]]
[.T\1
[.T\\will ]
[.VP
[.V\\eat ]
[.DP [.D\\a ] [.NP [.N\\burger ]]]
]
]
]
\end{document}
相同的语法适用于qtree
(tikzset
当然,没有命令)。但你可能会发现使用以下方法更容易forest
:
\documentclass[12pt]{standalone}
\usepackage[linguistics]{forest}
\begin{document}
\begin{forest}
[TP
[DP [D\\the ] [NP [N\\man ]]]
[T’
[T\\will ]
[VP
[V\\eat ]
[DP [D\\a ] [NP [N\\burger ]]]
]
]
]
\end{forest}
答案2
使用普通的 qtree 也很简单:节点文本可以包含换行符,因此只需将叶子写为D\\the
即可。只要任何地方都没有空格,解析器就会将它们作为一个单元处理。如果您想要一个带有空格的“原子”,请将整个内容括在括号中(例如{Adj\\a propos}
)
\Tree [.NP D\\the [.NP N\\man ] ]
双反斜杠是真正的 LaTeX 命令,因此要获得 POS 和终端之间的间隙,只需使用可选参数:
\Tree [.NP D\\[6pt]the [.NP N\\[6pt]man ] ]
还可以调整 qtree 设置,使叶子的行跳过默认更大。如果您要使用 plainqtree
并希望使用此选项,请告诉我。