在LaTeX中绘制语法分析树的方法有好几种,本文介绍使用forest宏包来绘制。下面直接通过例子介绍。
一、环境
- 操作系统:Ubuntu 20.04
- 引擎:XeTeX 3.14159265-2.6-0.999991
二、代码
不好意思,因为目前CSDN并不支持LaTeX代码的高亮显示,所以下面展示的代码只有一个颜色(难道CSDN相关人员从来不写论文吗?)。
% CSDN,繁星间漫步,陆巍的博客
\documentclass[UTF8]{ctexart}
% 注意宏包顺序,有可能会报错
\usepackage{geometry}% 用于页面设置
\usepackage{longtable}% 支持长表格跨页
\usepackage{qtree}% 绘制语法分析树
\usepackage{forest}% 绘制语法分析树
% 设置为A4纸
\geometry{
a4paper,
left = 19.1mm,
right = 19.1mm,
top = 25.4mm,
bottom = 25.4mm
}
% ------------------ 开始 -------------------
\begin{document}
qtree宏包绘制的语法分析树
\begin{center}
\Tree [.$list$
[.$list$
[.$list$ [.$digit$ 9 ]]
-
[.$digit$ 5 ]
]
+
[.$digit$ 2 ]
]
\end{center}
forest宏包绘制的语法分析树一
\begin{center}
\begin{forest}
[$list$,
[$list$,
[$list$ [$digit$ [9]]]
[-]
[$digit$ [5]]
]
[+]
[$digit$ [2]]
]
\end{forest}
\end{center}
forest宏包绘制的语法分析树二
\begin{center}
\begin{forest}
[$list$,
[$list$,
[$list$ [$digit$ [9, tier = word]]]
[-, tier = word]
[$digit$ [5, tier = word]]
]
[+, tier = word]
[$digit$ [2, tier = word]]
]
\end{forest}
\end{center}
forest宏包绘制的语法分析树三
\begin{center}
\begin{forest}
[$list$, s sep = 3em
[$list$, s sep = 2em
[$list$ [$digit$ [9, tier = word]]]
[-, tier = word]
[$digit$ [5, tier = word]]
]
[+, tier = word, before computing xy={s/.average={s}{siblings}}]
[$digit$ [2, tier = word]]
]
\end{forest}
\end{center}
\end{document}
三、pdf内容
四、说明
- 第一个例子使用的是qtree宏包绘制的;qtree宏包使用起来还是比较方便的,但是功能有限,只适合简单图形。
- 使用forest宏包绘制的图形有三幅,第一幅没有做任何修饰,看上去与qtree绘制的差不多,只是节点和展开角度不一样;第二幅为了更好的展示,使用了tier=word语句;第三幅是在第二幅的基础上进行了角度上的调整,看上去就要美观一些。
- forest宏包实际上是建立在tikz宏包的基础上。tikz的绘图功能很强,完全可以直接用来绘制语法分析树,但是比较麻烦,还是使用建立在tikz基础上的专用宏包方便些。在实际应用中,我们会碰到类似问题,虽然在tikz的帮助文件中列举了很多种图形的绘制方法,但直接使用tikz绘图并不是一件轻松的事,因此建议在对LaTeX有一定程度的掌握后,就按照自己的专业使用方向、在tikz的基础上创建专用绘图宏包。