我正在尝试创建一个宏,它将创建一个表示给定短语的树。我已查看 \expandafter 的说明并在此处使用了它,但是当我将此宏“\phrase”命令嵌入另一个 \phrase 命令中时,结果是嵌入的命令被读取为节点内的文本,而不是 \Tree 中多个节点的延续。
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{amssymb}
\newcommand{\xbar}{$'$}
\newcommand{\phrase}[4]{[.{#1P} {#2} [.{#1\xbar} [.{#1} {#3} ] {#4} ] ]}
\begin{document}
\expandafter \Tree \phrase{C}{spec}{head}{comp}
\expandafter \Tree \phrase{C}{spec}{head}{\phrase{I}{spec}{head}{comp}}
\end{document}
我该如何解决这个问题,不只是针对一个嵌入,而是针对我可能选择使用的尽可能多的连续嵌入(并且在任何节点中,而不仅仅是“补充”位置)?
答案1
这是一种可行的方法。您需要小心使用括号。我删除了它们#2
,#4
以免混淆解析器。除此之外,我首先\phrase
在宏中展开嵌套\temp
,其使用方式与非嵌套的情况相同\phrase
。
\documentclass{article}
\usepackage{tikz}
\usepackage{tikz-qtree}
\usepackage{amssymb}
\newcommand{\xbar}{$'$}
\newcommand{\phrase}[4]{[.{#1P} #2 [.{#1\xbar} [.{#1} {#3} ] #4 ] ]}
\begin{document}
\expandafter\Tree\phrase{C}{spec}{head}{{comp}}
\edef\temp{\phrase{I}{spec}{head}{\phrase{C}{spec}{head}{comp}}}
\expandafter\Tree\temp
\edef\temp{\phrase{I}{\phrase{C}{spec}{head}{comp}}{head}{comp}}
\expandafter\Tree\temp
\end{document}