分享

教你如何优雅且不污的画语言学树 | 语言学午餐

 文化艺术界 2016-06-27

上星期午餐君简单介绍了如何使用 phpSyntaxTreeTreeForm 来构造 语言学树,同时也说明了两种方法的利弊。虽然两种方法都操作简便、用户友好,但是不管是哪一种,由于功能的限制,都很难构造出完全符合我们预期的 语言学树,尤其是在加上了位移和各种要素之后。今天午餐君想给大家简单介绍一下如何使用 LaTeX 这款强大的编译软件来构造 语言学树。简单来说,就是通过 Qtreetree-dvips 两款宏包。


当然,想通过短短的一篇文章,让你从 LaTeX 入门到精通 那是不可能的(也希望不要加入 从入门到放弃 全家桶)。




午餐君主要想介绍如何使用这两款宏包来构造 语言学树,关于 LaTeX 的安装、宏包的安装(许多编译器应该都自带以上两款宏包)、对中文的支持以及文字板式的编排等等 还烦请大家自行搜索LaTeX 教程,当然小编也会给出一个最基础的模板来简化 这个学习过程。


Qtree是一款由普渡大学的 Jeff Siskind 教授开发的 语言学树前端绘制宏包,而tree-dvips则是 CTAN 负责维护的一款用来画 语言学树位移的宏包。


那么,如果你完全不会使用 LaTeX,请将以下代码复制到你使用的 LaTeX 编译器(小编是Mac用户,使用的是最常见的 TexShop),并在 标有 “Draw trees here” 的地方执行 我们即将使用的 画树 的代码。


\documentclass[]{article}


%%%% These packages make this work. Don't mess with these

\usepackage{times}

\usepackage{ulem}

\usepackage[nocenter]{qtree}

\usepackage{tree-dvips}

\usepackage{gb4e}


%Title/header info 

\title{Template for Tree-Drawing}

\author{Ling-Lunch}


\begin{document}


\maketitle


\section{Trees}


%%%%%%%%%%%%%%%%%%%%%%

%%%% Draw trees here %%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%


\Tree [.S This [.VP [.V is ] \qroof{a simple tree}.NP ] ]


\end{document}


以上代码中,我们已经构造了一棵 语言学树:


\Tree [.S This [.VP [.V is ] \qroof{a simple tree}.NP ] ]


如图:

与我们之前介绍的 phpSyntaxTree 相同,Qtree 也使用 [] 语法来表示语言学树的节点。同时,可以使用 {} 来囊括多单词的节点标志。需要注意的是,空格、空格、空格 在 Qtree的语法里十分重要(重要的事情说三遍),是用来给节点名称划定界限的单位。在上图的语法中,我们可以注意到 .S 表示的整个句子的根节点S,在.S 后带了一个空格,空格则表示之后的内容都在这个节点之下。同时别忘了在关上括号]之前也需要一个空格,表示这个节点的范围到此为止。这点务必牢记,如果忘记了空格的话会导致 LaTeX 的编译错误。


而在代码中的 \qroof 命令 则是画上大家喜闻乐见的三角形,使用语法大家可以参照上图。


同时,非终点节点的名称有两种表示方法,所以以下两行代码所构造出的 语言学树 是一样的:


\Tree [.S when [.NP the cat ]    sleeps ]

\Tree [.S when [    the cat ].NP sleeps ]



大家应该也注意到,Qtree 并不仅仅只支持双叉树。在 Qtree 中,每个节点最多可以有5个分支,一棵树的高度最高为20(也就是到最远的终点节点需要经过19个中间节点,不算头尾)。


那么再来给大家介绍一下如何在已有的树上画位移,我们主要依靠 tree-dvips 来画出位移,同时 tree-dvips 和 Qtree 两款宏包完全兼容,可以互相进行编译。有了位移的树就会变成下图这样(午餐君本学期的final paper里摘出来的):



表示的句子是 “我袜子丢了一双”


那么以下是想要画出这棵 语言学树 你所需要的代码:


\Tree [.TP [ [.D w\v o\\\node{D1}my ] [ \qroof{w\` a zi}\\\node{NP1}socks.NP ] ].DP [.T' [ \sout{le}\\\sout{\node{T1}PART} ].T [.VP [ {di\= u le}\\\node{V1}lost-le ].V [.DP [.D \sout{w\v o}\\\sout{\node{D2}my} ] [.NumP [.Num' [.Num y\=\i\\one ] [ shu\=ang\\\node{Clf1}pair.CLF ].Clf ] [.ClfP [ \qroof{\sout{{w\` a zi}}}\\\sout{\node{NP2}socks}.NP ] [.Clf \sout{shu\=ang}\\\sout{\node{Clf2}pair.CLF} ] ] ] ] ] ] ]

\anodecurve[bl] {T1} [bl] {V1} {0.4in}

\anodecurve[bl] {D2} [bl] {D1} {150pt}[5pt]

\anodecurve[bl] {Clf2} [bl] {Clf1} {120pt}[5pt]

\anodecurve[bl] {NP2} [bl] {NP1} {150pt}[5pt]


似乎看起来很复杂,可能你看完下面的简单说明之后可以清晰一点,当然也需要一些其他知识,比如如何画删除线(使用命令\sout)、如何画中文声调等等来帮助我们画树。


想要画出节点之间的位移,最重要的一点自然是定位需要位移的节点的位置,这点我们需要通过在 Qtree 构造的语言学树里进行节点的添加,语法是:\node{nodename}{object}

举个例子来说明,如果我们想要在 语言学树:


\Tree [.S This [.VP [.V is ] \qroof{a simple tree}.NP ] ]


的动词 V 节点 is上添加一个名为D1的节点,那么以上代码就会变成:


\Tree [.S This [.VP [.V \node{D1}is ] \qroof{a simple tree}.NP ] ]


需要注意的是,我们使用{}来囊括节点名称,在}之后必须马上跟上节点所包括的单词内容(这个例子里是is),如果出现空格的话,语法会默认V节点所包括的内容已经完结,所以此处不能有空格的出现


那么我们再设置一个D2节点给This,毕竟想要画出位移至少需要两个节点嘛。


\Tree [.S \node{D2}This [.VP [.V \node{D1}is ] \qroof{a simple tree}.NP ] ]


同理,This和}之间不能有空格,要不然会出现编译错误。


然后我们需要一个剪头曲线来连接这两个节点,来表示位移的发生,通常我们使用 \anodeconnect 命令来画曲线。基本语法:


\anodeconnect[fromloc]{fromnodename}[toloc]{tonodename}{fdepth}[tdepth]


{fromnodename}和{tonodename}分别表示起始节点名称和终点节点名称,这决定了我们箭头的方向。[fromloc]和[toloc]则表示具体节点的某个位置,有八种选项,分别以8组字母代号来表示,可以选择:



写到这里大家应该可以感受到 LaTeX 的强大之处了,不仅可以自动编排 语言学树 的板式,还可以精确地指定 位移曲线 的位置。{fdepth}[tdepth] 则是两组用来修正曲线幅度的数据,可以通过不同的数据来实现不同样子的曲线。


那么假设我们要画一个从D2节点到D1节点的位移曲线,我们想要从D2节点bl位置出发,到达D2节点bl位置,我们需要命令:


\anodecurve[bl] {D2} [bl] {D1} {0.4in}


我们可以得到如图的 语言学树:



稍稍修改一下参数,使用命令:


\anodecurve[bl] {D2} [bl] {D1} {150pt}[5pt]


我们可以得到 不一样的位移曲线:



总之,调整不同的参数,可以使位移曲线更加贴合你想要的样子。当然,大多数情况下,LaTex默认的参数就可以满足绝大多数的需求。


需要注意的是,有时候可能系统默认的 LaTex 编译配置不支持 tree-dvips,所以你导出的pdf文件里看不到 位移的曲线。如果你在mac环境下使用 TexShop,需要进入 Preferences-Typesetting,将Default Script 改为 Tex DVI 就可以进行预览了,其他编译软件应该也会有类似的设置需要更改。


当然 Qtree 和 tree-dvips 的功能远远不止这些,篇幅有限小编也只能简单介绍一下这些功能,下面提供两个宏包的用户手册,如果有兴趣钻研的读者可以好好学习一番:


Qtree: http://www.ling./advice/latex/qtree/qtreenotes.pdf

tree-dvips: http://mirrors./CTAN/macros/latex209/contrib/trees/tree-dvips/tree-manual.pdf





    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多