LaTeX之qtree巨集包繪製語法分析樹示例
阿新 • • 發佈:2021-11-21
使用LaTeX中的qtree巨集包繪製語法分析樹示例。
繪製語法分析樹可以使用tikz巨集包來實現,並且tikz可以繪製很複雜的圖形。但如果只是需要一些簡單的圖形,使用qtree巨集包就可以滿足。
1. 環境
- Ubuntu 20.04
- LuaLaTeX 1.10.0
2. 示例程式碼:
% 部落格園,繁星間漫步,陸巍的部落格 \documentclass{article}% 中文板式:ctexart,英文版式:article \usepackage{ctex}% 中文支援 \usepackage{geometry}% 用於頁面設定 \usepackage{qtree}% 繪製語法分析樹 \usepackage{tikz}% 繪圖 \usetikzlibrary{shapes} \setmainfont{Ubuntu Mono}% 設定全域性英文字型 % 設定為A4紙,邊距適中模式(參考永中office) \geometry{ width = 210mm, height = 297mm, left = 19.1mm, right = 19.1mm, top = 25.4mm, bottom = 25.4mm } \begin{document} 部落格園,繁星間漫步,陸巍的部落格(https://www.cnblogs.com/among-the-stars) \section{示例一} \Tree [.E [.E [.T [.T [.F [.I 3 ]]] [.op2 * ] [.F [.I 5 ]] ] ] [.op1 + ] [.T [.F ( [.E [.E [.T [.E [.I 1 ]]]] [.op1 - ] [.T [.I i ]] ] ) ] ] ] \section{示例二} \Tree [.{Assignment Statement\\=} Identifier\\sum [.Expression\\+ Identifier\\num1 Identifier\\num2 ] ] \section{示例三} \Tree [.E ]\quad \begin{tikzpicture}[every node/.style={single arrow, draw}, rotate border/.style={shape border uses incircle, shape border rotate=#1}] \node {第一步推導}; \end{tikzpicture} \Tree [.E E op1 T ] \begin{tikzpicture}[every node/.style={single arrow, draw}, rotate border/.style={shape border uses incircle, shape border rotate=#1}] \node {第二步推導}; \end{tikzpicture} \Tree [.E E op1 [.T F ]] \begin{tikzpicture}[every node/.style={single arrow, draw}, rotate border/.style={shape border uses incircle, shape border rotate=#1}] \node {第三步推導}; \end{tikzpicture} \Tree [.E E op1 [.T [.F ( E ) ]]] \begin{tikzpicture}[every node/.style={single arrow, draw}, rotate border/.style={shape border uses incircle, shape border rotate=#1}] \node {……}; \end{tikzpicture} \centerline{圖3-2 構造語法樹示意圖} \end{document}
3. 效果
4. 注意事項:
- 在右中括號與字元之間一定要有空格,例如程式碼
\Tree [.E E op1 [.T F ]]
,其中的F與]之間一定要有空格,否則編譯報錯。 - 如果節點名稱比較長,需要多行時,可以使用大括號包含來表示,否則會被當作子節點處理。