我正在使用该qtree
包制作语言 C 树木。考虑以下简单的树:
由以下代码生成:
\documentclass{article}
\usepackage{qtree}
% shorthands for annotations below nodes
\newcommand{\subj}{\textsc{subj}}
\newcommand{\up}{$\uparrow$~}
\newcommand{\down}{$\downarrow$~}
\newcommand{\updown}{$\uparrow\,=\,\downarrow$}
\begin{document}
\Tree [ .{IP_{1}} [ .{DP_{2} \\ (\up \subj) = \down} ] [ .{VP_{3} \\ \updown} ] ]
\end{document}
我一直在尝试为这些 qtree 节点制作一个宏,因为它们每次都遵循相同的结构。此外,大约 60% 的时间,节点下方的注释是\updown
,因此这可能是宏的默认参数。到目前为止,我有这个:
\newcommand{\node}[3][\updown]{ .{#2_{#3} \\ #1} }
因此上面的树将是:
\Tree [ \node{}{IP}{1} [ \node{(\up \subj) = \down)}{DP}{2} ] [ \node{VP}{3} ] ]
但这给了我错误:
Extra }, or forgotten $.
Missing } inserted.
我不明白我在这里错过了什么。
额外的问题是,它能否自动编号,而不必将这些索引作为参数传递?编号在树代码中从左到右进行(因此在树本身中是深度优先的)。