我一直在研究语义学家编写的 Latex 教程,并且一直在努力编写此 LF 表示的代码(使用qtree
)。我非常认真地研究了复杂树的示例代码,并为新的 LF 表示构建了自己的代码。我很确定这应该是正确的代码。然而 Latex 不想编译。
我唯一没有从教程文件中采用的是!\qsetw{}
用于操纵树宽度的命令。
但是据我从其他教程中了解qtree
,使用此命令不是强制的,即 Latex 能够按原样计算树的间距。
不过我又不太确定,是不是 Latex 需要我使用!\qsetw{}
后才能编译?
以下是代码:
\documentclass[twoside=semi,BCOR=8mm,headsepline,headings=normal,openright]{scrreprt}
\usepackage{linguex}
\usepackage[center]{qtree}
\usepackage{tree-dvips}
\makeatletter
\def\qroof#1.#2 {{%
\setbox\@qrscratchbox = \hbox{\let\qtreepadding=\qroofpadding
\qshow@text[l]{\qleafhook}{#1}}%
\def\qtreepadding{0pt}%
\begin{tabular}{@{}c@{}}
\setbox\@tempboxa = \hbox{\qshow@text{\qlabelhook}{#2}}%
\ifdim\wd\@tempboxa>0pt \box\@tempboxa \\ \fi
\unitlength=\wd\@qrscratchbox \qdraw@roof \\[-0.6ex]
\box\@qrscratchbox
\end{tabular}}}
\makeatother
\qroofy=1
\qroofx=2
\begin{document}
\ex.
\Tree
[.$_{\langle v,t\rangle}$ {\textit {Floyd} \\ $_{\langle e \rangle}$}
[. $_{\langle e, \langle v,t \rangle\rangle}$
[.$_{\langle \langle r,t \rangle, \langle e, \langle v,t \rangle \rangle}$ {\textit {AUG-SPEED} \\ $_{\langle \langle\langle e, \langle v,t \rangle \rangle, \langle \langle r,t \rangle \langle e, \langle v,t \rangle\rangle\rangle}$}
\qroof{walk}.$_{\langle e, \langle v,t, \rangle\rangle}$
]
\qroof{quickly}.$_{\langle r,t \rangle}$
]
]
\par
\end{document}
答案1
这是您的树的一个版本,其中各种内容都已清理。首先,手动输入所有语义类型会使源树非常难以阅读,也更容易出错。您还滥用下标命令使类型字体变小。所以我首先定义了一个宏来引入类型。(感谢 David Carlisle 和 egreg 在聊天中提供的帮助。)
\newcommand{\type}[1]{\ensuremath{\substack{\langle#1\rangle}}}
这允许您使用\type{e,t}
来生成正确括号内的类型。请注意 <埃> 不是类型(但是埃是),并且不应括在尖括号中。
我还删除了重新定义,\qroof
据我所知它没有任何作用。
现在,这是带有 的树qtree
。如您所见,!\qsetw
不需要 的实例,尽管树的间距不是很漂亮。
\documentclass[twoside=semi,BCOR=8mm,headsepline,headings=normal,openright]{scrreprt}
\usepackage[center]{qtree}
\usepackage{amsmath} % for \substack command
\newcommand{\type}[1]{\ensuremath{\substack{\langle#1\rangle}}}
\qroofy=1
\qroofx=2
\begin{document}
\Tree
[.\type{v,t}
{\textit {Floyd}\\$e$}
[.\type{e,\type{v,t}}
[.\type{\type{r,t},\type{e,\type{v,t}}}
[.{\textit{AUG-SPEED} \\ \type{\type{e,\type{v,t}},\type{\type{r,t},\type{e,\type{v,t}}}}} ]
\qroof{walk}.{\type{e,\type{v,t}}}
]
\qroof{quickly}.\type{r,t} ]
]
\end{document}
这是对这个问题更一般的回答。由于间距问题,qtree
我建议切换到tikz-qtree
或forest
可能是复杂树的首选解决方案。
qtree
该 !\qsetw
命令在qtree
树中从来都不是必需的。手动调整节点的宽度可能很有用,但由于这是手动干预,因此广泛使用会变得乏味。以下是带有的示例树qtree
:
\documentclass[margin=3pt,varwidth=11in]{standalone}
\usepackage{qtree}
\begin{document}
Tree using \texttt{qtree} without using \verb|!\qsetw|:
\Tree
[.S \qroof{this is a big noun phrase}.NP
[.VP
[.VP
\qroof{this is big noun phrase}.NP
[.V\1
[.V\\shows ]
[.NP\\something ]
]
]
\qroof{with an adverbial phrase}.PP
]
]
\end{document}
如您所见,qtree
它本身并不能很好地压缩树。因此,为了使树更紧凑,我们需要使用!\qsetw
命令来手动修复宽度。这是调整后的树:
\documentclass[margin=3pt,varwidth=11in]{standalone}
\usepackage{qtree}
\begin{document}
Tree using \texttt{qtree} adjusted using \verb|!\qsetw|:
\Tree
[.S \qroof{this is a big noun phrase}.NP
[.VP !\qsetw{-3cm}
[.VP
\qroof{this is big noun phrase}.NP
[.V\1
[.V\\shows ]
[.NP\\something ]
]
]
!\qsetw{4cm}
\qroof{with an adverbial phrase}.PP
]
]
tikz-qtree
如果我们使用该包,我们可以自动获得更紧凑的树tikz-qtree
。此包使用与完全相同的语法来指定树,qtree
但使用强大的 TikZ 包来渲染树。您可以看到,这棵树在垂直方向上比树更紧凑qtree
,但在水平方向上仍然不是特别紧凑。
\documentclass[margin=3pt,varwidth=11in]{standalone}
\usepackage{tikz-qtree,tikz-qtree-compat}
\tikzset{every tree node={align=center,anchor=north}}
\begin{document}
Tree using \texttt{tikz-qtree}:
\Tree
[.S [.NP \edge[roof]; {this is a big noun phrase} ]
[.VP
[.VP
[.NP \edge [roof]; {this is big noun phrase} ]
[.V\1
[.V\\shows ]
[.NP\\something ]
]
]
[.PP \edge[roof]; {with an adverbial phrase} ]
]
]
\end{document}
forest
我们可以使用该包来实现最紧凑的树forest
。它也使用 TikZ,并且树语法略有不同:节点标签不需要前缀.
(在qtree
和中都需要前缀),但终端节点也需要用括号括起来(在和tikz-qtree
中不需要)。qtree
tikz-qtree
qtree
您可以在这里看到,该树在水平方向上比或树紧凑得多tikz-qtree
,因为forest
其目的是使树尽可能紧凑。
\documentclass[margin=3pt,varwidth=11in]{standalone}
\usepackage[linguistics]{forest}
\def\1{$'$}
\begin{document}
Tree using \texttt{forest}:
\begin{forest}
[S [NP [{this is a big noun phrase}, roof] ]
[VP
[VP
[NP [{this is a big noun phrase}, roof] ]
[V\1
[V\\shows ]
[NP\\something ]
]
]
[PP [{with an adverbial phrase},roof] ]
]
]
\end{forest}
\end{document}