为 qtree 中的节点定义宏

为 qtree 中的节点定义宏

我正在使用该qtree包制作语言 C 树木。考虑以下简单的树:

具有 IP_1 节点的组成圣诞树,分为注释 (up SUBJ) = down 的 DP_2 节点和注释 up = down 的 VP_3 节点

由以下代码生成:

\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.

我不明白我在这里错过了什么。

额外的问题是,它能否自动编号,而不必将这些索引作为参数传递?编号在树代码中从左到右进行(因此在树本身中是深度优先的)。

相关内容