1. 程式人生 > 其它 >LaTex繪圖之forest巨集包繪製語法分析樹

LaTex繪圖之forest巨集包繪製語法分析樹

在LaTeX中繪製語法分析樹的方法有多種,以前我介紹過使用qtree巨集包來繪製,但其功能有限,現在介紹功能更強的forest巨集包。

下面的示例圖案選自《編譯原理》第2版第2章圖2-5。完整示例程式碼如下:

% 部落格園,繁星間漫步,陸巍的部落格
\documentclass{article}

% 注意巨集包順序,有可能會報錯
\usepackage{ctex}% 中文支援
\usepackage{geometry}% 用於頁面設定
\usepackage{longtable}% 支援長表格跨頁
\usepackage{qtree}% 繪製語法分析樹
\usepackage{forest}% 繪製語法分析樹

% 設定為A4紙,邊距適中模式(參考永中office)
\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}

效果如下:

說明:
1、第一個例子使用的是qtree巨集包繪製的;
2、使用forest巨集包繪製的圖形有三幅,第一幅沒有做任何修飾,看上去與qtree繪製的差不多,只是節點和展開角度不一樣;第二幅為了更好的展示,使用了tier=word語句;第三幅是在第二幅的基礎上進行了角度上的調整,看上去就要美觀一些。
3、forest巨集包實際上是建立在tikz巨集包的基礎上。