その他の描画系(PSTricks / Asymptote ほか)

TikZ は今や作図の事実上の標準ですが、それが唯一の選択肢ではありません。TikZ より前から使われ、今も役割を持つ描画系がいくつもあります。PostScript の力を借りる PSTricks、図式に強い古参の Xy-pic、2D と 3D をこなす独立した言語 Asymptote、METAFONT の血を引く MetaPost。このページは、これら非 TikZ の描画系がそれぞれ何で、どんなときに手に取るのか——とりわけ各系の「出力経路の癖」——を整理します。新規であれば基本は TikZ で十分で、これらは旧来の文書・3D・特定のエコシステムのために知っておくもの、という位置づけです。

まず TikZ が既定

本題に入る前に立場をはっきりさせておきます。今から LaTeX で図を描き始めるなら、まず TikZ を選ぶ のが正解です。TikZ は能動的に保守され、pdflatexlualatexxelatex のいずれでも追加の外部ツールなしに動き、文書のフォントや色とも自然になじみ、膨大なライブラリ(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 も使えます。次は最小の例です。

latex
\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 にします。

terminal
latex figure.tex
dvips figure.dvi -o figure.ps
ps2pdf figure.ps

どうしても pdflatex のワークフローに載せたい、あるいは PNG・JPEG 画像も混ぜたい、というときには回避策があります。**pst-pdfauto-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] のように連ねると斜め(右下の隣)を指します。矢印にラベルを載せるには、数式の添字と同じ記法を流用します。**^ を付けると矢印の上(左側)、_** を付けると下(右側)にラベルが来ます。

latex
\[
\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)を生成します。最後にもう一度 latexpdflatex を走らせると、できあがった図が取り込まれます。

terminal
pdflatex document
asy document-*.asy
pdflatex document

この三段階を手で回すのは面倒なので、実務では **latexmk に任せて自動化するのが普通です。なお Asymptote の図は、文書に埋め込まず 独立した .asy ファイル** として書き、asy figure.asy のように単体で実行して PDF や EPS、あるいは(インタラクティブな 3D を含む形式へ)出力することもできます。次は最小の .asy の例です。

latex
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 の利用が前提)。次は最小の例です。

document.tex
% 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 に組み込まれます。fullcirclepencirclescaled は MetaPost 組み込みの語彙です。

MetaPost のエコシステムで重要なのが MetaFun です。これは MetaPost 用の高機能フォーマットで、組版システム ConTeXt はこの MetaFun を介して MetaPost を深く統合しています。ConTeXt を使う人にとっては、MetaPost(MetaFun)が中心的な作図手段になります。逆に LaTeX 主体であれば、ふだんは TikZ を使い、MetaPost は METAFONT 由来の曲線記述が欲しいときや ConTeXt 連携のために知っておく、という位置づけになります。

系の比較と選び方

四つの系を、出力経路・エンジン・強みで並べると次のようになります。共通して言えるのは、新規であればまず TikZ であり、ここに挙げた系はそれぞれ固有の理由——既存文書、3D、特定エコシステム——があるときに選ぶ、ということです。

出力経路・エンジン強み・主な用途
PSTrickslatex → dvips → ps2pdf。または pst-pdfauto-pst-pdf(要 --shell-escape)、XeLaTeXPostScript の高品質な塗り・効果。既存文書が多い
Xy-picふつうの LaTeX で動く(特別な経路は不要)可換図式(古参)。現代は tikz-cd が代替
Asymptotelatex/pdflatex → 外部 asy → 再度 latex(latexmk で自動化)。または単体 .asy本格的な 2D・3D。座標軸付きの立体や曲面
MetaPostmpost.mp を処理。または LuaLaTeX + luamplibmplibcode(外部ツール不要)METAFONT 由来の曲線。ConTeXt(MetaFun)の中心

実務的な目安です。既存文書の保守なら、その文書が使っている系(PSTricks や Xy-pic)をそのまま読み書きできるようにします。3D の図が要るなら Asymptote が第一候補です。ConTeXt を使うなら MetaPost(MetaFun)が自然です。可換図式を新規に描くなら Xy-pic ではなく tikz-cd を選びます。そして、これらに当てはまらない大多数の作図は、追加の外部ツールも特殊な出力経路も要らない TikZ で済ませるのが、いちばん手堅い選択です。