LaTex之forest宏包绘制语法分析树

发布于:2023-01-18 ⋅ 阅读:(768) ⋅ 点赞:(0)

在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内容

forest宏包绘制语法分析树

四、说明

  • 第一个例子使用的是qtree宏包绘制的;qtree宏包使用起来还是比较方便的,但是功能有限,只适合简单图形。
  • 使用forest宏包绘制的图形有三幅,第一幅没有做任何修饰,看上去与qtree绘制的差不多,只是节点和展开角度不一样;第二幅为了更好的展示,使用了tier=word语句;第三幅是在第二幅的基础上进行了角度上的调整,看上去就要美观一些。
  • forest宏包实际上是建立在tikz宏包的基础上。tikz的绘图功能很强,完全可以直接用来绘制语法分析树,但是比较麻烦,还是使用建立在tikz基础上的专用宏包方便些。在实际应用中,我们会碰到类似问题,虽然在tikz的帮助文件中列举了很多种图形的绘制方法,但直接使用tikz绘图并不是一件轻松的事,因此建议在对LaTeX有一定程度的掌握后,就按照自己的专业使用方向、在tikz的基础上创建专用绘图宏包。

网站公告

今日签到

点亮在社区的每一天
去签到