qtreeパッケージを使って木構造を書こう.
本文中では数理論理学の例をひいていますが,広く木構造が必要な人に向けて qtree
はおすすめです.
さっそく具体例
論理式 $p \land (p \rightarrow q) \rightarrow q$ の構文木を,次のように書くことができる.
入力
\Tree
[.$\rightarrow$
[.$\land$
$p$
[.$\rightarrow$ $p$ $q$
]
]
$q$
]
さらに,論理式 $p \land (p \rightarrow q) \rightarrow q$ のタブロー法による証明は以下のように書ける.
入力
\Tree
[.$\neg(p\land(p\rightarrow q)\rightarrow q)$
[.$p\land(p\rightarrow q)$\\$\neg q$
[.$p$\\$p\rightarrow q$
[.$\neg p$ $\bot$
]
[.$q$ $\bot$
]
]
]
]
公式サイトの紹介
qtree パッケージはこちらのサイトから導入できる.
qtree.sty
がパッケージ.
公式のマニュアルは qtreenotes.pdf
.
基本の使い方
プリアンブルに以下を入力しておく.
\usepackage{qtree}
これで qtree.sty
が使える.
このパッケージを用いると, \Tree
コマンドで木構造を書くことができる.とくに \includegraphics
コマンドとか figure
環境とかを用いずとも使える.
親子のみの木は \Tree [.A B C D ]
のように書く.ドットのすぐ後ろの記号が親になる.
このとき,以下の2点に注意.
\Tree
コマンドと角カッコの間に半角スペースを空ける.- 最後の文字と閉じ角カッコの間には半角スペースを空ける.
これができていないと容赦なくエラーを吐かれる.
入力
\Tree [.A B C D ]
2語以上の言葉を node におくには注意が必要.半角スペースが構造に反映されるので,それを嫌う場合は{}
で囲う必要がある.
入力
\Tree [.ramen noodle soup {various ingredients} ]
要素を折り返す場合は\\
を挿入する. 前後に半角スペースは入れない.
入力
\Tree [.ramen noodle soup various\\ingredients ]
高さが3以上の木は,次のように入れ子構造で書く.
入力
\Tree [.A [.B E F ] [.C G H ] ]
木の高さに応じて,インデントを付けておくとわかりやすい.半角スペースを忘れずに.
入力
\Tree
[.A
[.B E F
]
[.C G H
]
]
出力は前図と同様.
数式の挿入
qtree
パッケージでつくる木には,数式を挿入することもできる.
ただし,「見やすいように」と半角スペースを入れるとそれが木構造の区切りと判定され,目的の木が出力できない. 最悪エラーを吐かれる.
それを防ぐために,スペースは最低限のみ入れる.
具体的には,
- $A_1 A_2$ を出力したい場合:
$A_1A_2$
と入力する.$A_1 A_2$
はエラー. - $A \land B$ を出力したい場合:
$A\land B$
と入力する.コマンドの直後にコマンドでない文字が来る場合は,半角スペースを入れてよい. - $A \lor \neg A$ を出力したい場合:
$A\lor\neg A$
と入力する.コマンドが連続する場合は半角スペースを入れてはいけない.
入力
\Tree
[.$(p_1\land q_1)\lor(p_2\land q_2)$
[.$p_1\land q_1$ $p_1$\\$q_1$
]
[.$p_2\land q_2$ $p_2$\\$q_2$
]
]
ほかにもさまざまな機能があるが,さしあたってこれらが使えれば問題ない(と思う).
この記事が $\LaTeX$ ユーザーの一助になればと思います.