使用带有嵌入式宏的 tikz q-tree

使用带有嵌入式宏的 tikz q-tree

我正在尝试创建一个宏,它将创建一个表示给定短语的树。我已查看 \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}

在此处输入图片描述

相关内容