TikZ は今や作図の事実上の標準ですが、それが唯一の選択肢ではありません。TikZ より前から使われ、今も役割を持つ描画系がいくつもあります。PostScript の力を借りる PSTricks、図式に強い古参の Xy-pic、2D と 3D をこなす独立した言語 Asymptote、METAFONT の血を引く MetaPost。このページは、これら非 TikZ の描画系がそれぞれ何で、どんなときに手に取るのか——とりわけ各系の「出力経路の癖」——を整理します。新規であれば基本は TikZ で十分で、これらは旧来の文書・3D・特定のエコシステムのために知っておくもの、という位置づけです。
まず TikZ が既定
本題に入る前に立場をはっきりさせておきます。今から LaTeX で図を描き始めるなら、まず TikZ を選ぶ のが正解です。TikZ は能動的に保守され、pdflatex・lualatex・xelatex のいずれでも追加の外部ツールなしに動き、文書のフォントや色とも自然になじみ、膨大なライブラリ(tikz-cd、PGFPlots、circuitikz など)が周辺に揃っています。TikZ そのものは別ページ「TikZ の基本」で扱います。
では、なぜほかの系を知る必要があるのでしょうか。理由はおもに三つです。第一に 既存文書——古い論文・書籍・テンプレートは PSTricks や Xy-pic で書かれていることがあり、保守・改訂のために読めねばなりません。第二に 3D——本格的な三次元の図は Asymptote が最も得意とします。第三に 特定のエコシステム——ConTeXt の世界では MetaPost(MetaFun)が中心的な作図手段です。以下、順に見ていきます。
PSTricks —— PostScript の力
PSTricks は、PostScript の描画機能を TeX/LaTeX のソースの中から直接呼び出すマクロ群です。名前のとおり内部で PostScript を使うため、塗り・グラデーション・座標変換などを高い品質でこなせます。プリアンブルで \usepackage{pstricks} と読み込み、図は **pspicture 環境** の中に書きます。座標は環境を開くときに \begin{pspicture}(0,0)(4,3) のように左下と右上で与えます。
基本的な描画命令はおおむね名前から働きが読めます。\psline は線(折れ線)、\pscircle は円、\psframe は長方形を引きます。座標は丸括弧で \psline(0,0)(3,2) のように与え、円は中心と半径を \pscircle(2,2){1} のように指定します。任意のオブジェクト(文字や別の図)を所定の座標へ置くには **\rput** を使い、\rput(2,1){テキスト} と書きます。位置に角度や寄せを足したいときは \uput も使えます。次は最小の例です。
\begin{pspicture}(0,0)(4,3)
\psframe(0,0)(4,3)
\psline{->}(0,0)(3,2)
\pscircle(2,1.5){1}
\rput(2,1.5){$O$}
\end{pspicture}この図は、幅 4・高さ 3 の長方形の枠を引き、その中に原点から (3,2) へ向かう矢印付きの線分を描き、中心 (2,1.5)・半径 1 の円を重ね、円の中心に数式 O を置きます。\psline{->} の {->} は矢じりの指定で、PSTricks では線種・矢じり・色などを角括弧 [...] のオプションでまとめて与えます(例: \psline[linewidth=2pt,linecolor=red]{->}(...))。
ここで 最大の注意点 です。PSTricks は PostScript の \special(DVI に埋め込む特殊命令)に依存するため、**PDF を直接生成する pdflatex ではそのままでは動きません。古典的かつ確実な経路は、DVI を経由する latex → dvips → ps2pdf** です。すなわち latex で DVI を作り、dvips で PostScript に変換し、ps2pdf(Ghostscript)で PDF にします。
latex figure.tex
dvips figure.dvi -o figure.ps
ps2pdf figure.psどうしても pdflatex のワークフローに載せたい、あるいは PNG・JPEG 画像も混ぜたい、というときには回避策があります。**pst-pdf や auto-pst-pdf** パッケージは、PSTricks 部分だけを裏で PostScript 経由でレンダリングして PDF 片に変換し、pdflatex の出力に取り込みます(auto-pst-pdf は外部処理を呼ぶため --shell-escape 付きでの実行が必要です。同系の pdftricks も同様に -shell-escape を要します)。もう一つの手は XeLaTeX で組むことで、xetex-pstricks パッケージが入っていれば、ソースを変えずに xelatex で PSTricks を扱えます。
PSTricks には pst-plot(関数プロット)、pst-node(ノードと結線)、pst-3dplot(3D プロット)など派生パッケージが豊富にあり、表現力は高いままです。ただし出力経路の制約があるぶん、新規の文書では TikZ のほうが扱いやすいことが多いでしょう。
Xy-pic —— 図式の古参
Xy-pic(パッケージ名 xy)は、グラフや図式を組むための古くからある汎用パッケージです。plain TeX・LaTeX・AMS-LaTeX のいずれでも動き、圏論・代数・位相幾何のほか、オートマトン・データベース・化学・系図など幅広い分野の図に使われてきました。LaTeX では \usepackage[all]{xy} と読み込むのが定番で、[all] で標準的な機能一式が有効になります。
もっともよく使われるのが、とりわけ 可換図式 のための **\xymatrix** です。これは行列のように図を組むモードで、tabular と同じく要素を & で横に区切り、\\ で行を改めます。対象どうしを結ぶ矢印は **\ar** 命令で描き、行き先を方向キーで与えます。[r] が右、[l] が左、[u] が上、[d] が下で、[rd] のように連ねると斜め(右下の隣)を指します。矢印にラベルを載せるには、数式の添字と同じ記法を流用します。**^ を付けると矢印の上(左側)、_** を付けると下(右側)にラベルが来ます。
\[
\xymatrix{
A \ar[r]^{f} \ar[d]_{\alpha} & B \ar[d]^{\beta} \\
C \ar[r]_{g} & D
}
\]これは、四隅に A・B・C・D を置いた可換正方形で、上辺に右向きの f、左辺に下向きの α、右辺に下向きの β、下辺に右向きの g を描いた図になります。ラベル f は上辺の矢印の上、g は下辺の矢印の下に置かれます。なお図式そのものは数式の一種なので、別行立ての数式環境(\[ … \])の中に入れています。
Xy-pic は歴史的に重要で今も多くの文書で見かけますが、可換図式に関しては **TikZ ベースの tikz-cd が現代的な代替** です。tikz-cd のほうが曲線・凝った矢じり・複雑な多段図式を扱いやすく、エラーメッセージも親切です。新規に書くなら tikz-cd、既存の Xy-pic 文書を保守するなら本節の知識、という使い分けがよいでしょう。両者の比較は「可換図式」のページで詳しく扱います。
Asymptote —— 2D と 3D の言語
Asymptote は、TeX のマクロではなく 独立したベクタグラフィックスの言語 です。C++ 風の構文を持ち、変数・関数・ループ・型を備えた本格的なプログラミング言語として図を記述します。LaTeX が科学技術文書にもたらす高品質な組版を、図にも同じ水準で与えることを目指しており、2D だけでなく 3D の図 を高い品質で描けるのが際立った特徴です。ラベルの組版には TeX を使うため、図中の数式も本文と同じ書体でそろいます。
LaTeX に埋め込むには、プリアンブルで \usepackage{asymptote} と読み込み、図のコードを **asy 環境**(\begin{asy} … \end{asy})の中に書きます。仕組み上、コンパイルは 三段階 になります。まず latex(または pdflatex)を走らせると、各 asy 環境の中身が一時的な .asy ファイルに書き出されます。次に外部プログラム **asy** をそれらに対して走らせて図(pdflatex 向けには PDF、latex/dvips 向けには EPS)を生成します。最後にもう一度 latex/pdflatex を走らせると、できあがった図が取り込まれます。
pdflatex document
asy document-*.asy
pdflatex documentこの三段階を手で回すのは面倒なので、実務では **latexmk に任せて自動化するのが普通です。なお Asymptote の図は、文書に埋め込まず 独立した .asy ファイル** として書き、asy figure.asy のように単体で実行して PDF や EPS、あるいは(インタラクティブな 3D を含む形式へ)出力することもできます。次は最小の .asy の例です。
import three;
size(6cm);
draw(unitcube);
draw(O--X, red, Arrow3);
draw(O--Y, green, Arrow3);
draw(O--Z, blue, Arrow3);この Asymptote コードは、three モジュール(3D 機能)を読み込み、単位立方体を描いたうえで、原点から x・y・z の各軸方向へ赤・緑・青の三次元矢印を引きます。size(6cm) は仕上がりの大きさの指定です。このように、Asymptote は座標軸付きの立体や曲面など、TikZ では骨の折れる本格的な 3D を比較的素直に書ける点が強みです。xasy という GUI フロントエンドもあり、対話的に描いた図を .asy ソースとして書き出して手で編集できます。
MetaPost —— METAFONT の系譜
MetaPost は、クヌースの METAFONT(フォントを記述するための言語)を John Hobby が改作し、出力を PostScript にしたものです。METAFONT 譲りの、点と方向から滑らかな曲線を解いて引く独特の記法(Hobby のアルゴリズム)を持ち、座標を方程式として宣言的に書けるのが特徴です。古典的には独立した言語として、専用プログラム **mpost** で .mp ファイルを処理して EPS を得ます。
現代的には、LuaLaTeX の中にインラインで 書くのが手軽です。**luamplib** パッケージ(\usepackage{luamplib})を読み込むと、**mplibcode 環境 の中に MetaPost コードをそのまま書けます。これは LuaTeX に組み込まれた mplib ライブラリ** を使って図を組版するため、mpost を別途呼び出す必要も、--shell-escape も要りません。PDF モードでも DVI モードでも動きます(DVI 出力では dvipdfmx の利用が前提)。次は最小の例です。
% lualatex で処理する / compile with lualatex
\documentclass{article}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
draw fullcircle scaled 2cm withpen pencircle scaled 1pt;
draw (-1cm,0)--(1cm,0);
draw (0,-1cm)--(0,1cm);
endfig;
\end{mplibcode}
\end{document}この mplibcode の中身は MetaPost のコードです。beginfig(1) … endfig が一つの図を区切り、半径 1cm(直径 2cm に拡大した単位円)の円を太さ 1pt のペンで描き、その円に水平・垂直の直径を一本ずつ引きます。LuaLaTeX で処理すれば、外部ツールを呼ばずにこの図がそのまま PDF に組み込まれます。fullcircle や pencircle、scaled は MetaPost 組み込みの語彙です。
MetaPost のエコシステムで重要なのが MetaFun です。これは MetaPost 用の高機能フォーマットで、組版システム ConTeXt はこの MetaFun を介して MetaPost を深く統合しています。ConTeXt を使う人にとっては、MetaPost(MetaFun)が中心的な作図手段になります。逆に LaTeX 主体であれば、ふだんは TikZ を使い、MetaPost は METAFONT 由来の曲線記述が欲しいときや ConTeXt 連携のために知っておく、という位置づけになります。
系の比較と選び方
四つの系を、出力経路・エンジン・強みで並べると次のようになります。共通して言えるのは、新規であればまず TikZ であり、ここに挙げた系はそれぞれ固有の理由——既存文書、3D、特定エコシステム——があるときに選ぶ、ということです。
| 系 | 出力経路・エンジン | 強み・主な用途 |
|---|---|---|
PSTricks | latex → dvips → ps2pdf。または pst-pdf/auto-pst-pdf(要 --shell-escape)、XeLaTeX | PostScript の高品質な塗り・効果。既存文書が多い |
Xy-pic | ふつうの LaTeX で動く(特別な経路は不要) | 可換図式(古参)。現代は tikz-cd が代替 |
Asymptote | latex/pdflatex → 外部 asy → 再度 latex(latexmk で自動化)。または単体 .asy | 本格的な 2D・3D。座標軸付きの立体や曲面 |
MetaPost | mpost で .mp を処理。または LuaLaTeX + luamplib の mplibcode(外部ツール不要) | METAFONT 由来の曲線。ConTeXt(MetaFun)の中心 |
実務的な目安です。既存文書の保守なら、その文書が使っている系(PSTricks や Xy-pic)をそのまま読み書きできるようにします。3D の図が要るなら Asymptote が第一候補です。ConTeXt を使うなら MetaPost(MetaFun)が自然です。可換図式を新規に描くなら Xy-pic ではなく tikz-cd を選びます。そして、これらに当てはまらない大多数の作図は、追加の外部ツールも特殊な出力経路も要らない TikZ で済ませるのが、いちばん手堅い選択です。