LaTeX で可換図式を描くパッケージ各種

要約:Xy-pic か TikZ-cd を使おう。

LaTeX において可換図式を描くためのパッケージはいくつか存在する。この記事では、そういうパッケージをいくつか調べ、試してみた。

目次

amscd

CTAN: Package amscd

ドキュメント (amscd.pdf) によると、 AMS-TeX にあった可換図式機能の LaTeX 版、ということらしい。(しかし、AMS-TeX の User’s Guide (amsguide.pdf) を見ても可換図式への言及がない)

\usepackage{amscd} で使えるようになる。

amscd で図式を描くには、CD 環境を使う。CD 環境は数式環境の中に書く。矢印はアットマークから始まるやつで指定する。

\[
  \begin{CD}
     A @>{f}>> B \\
  @V{g}VV    @VVV \\
     C   @>>>  D
  \end{CD}
\]

矢印の指定は、次の7種類が用意されている:

  • @>>> : 右向き矢印(キーボードに > キーがない人のために、代替記法として @))) が用意されている)
  • @<<< : 左向き矢印(キーボードに > キーがない人のために、代替記法として @((( が用意されている)
  • @AAA : 上向き矢印
  • @VVV : 下向き矢印
  • @= : 等号(横)
  • @| , @\vert : 等号(縦)
  • @. : 矢印を出力しない

逆にいうと、これらの7種類以外の矢印(斜め方向とか、破線とか)は使えない。

矢印にラベル(射の名前)をつける場合は、アットマークに続く3文字のうち、1文字目と2文字目の間、または2文字目と3文字目の間に書く。 @>{ほにゃらら}>> という感じで。

AMScd はこのように貧弱なので、真面目に LaTeX を書く際に使うことは少ないだろうが、 MathJax は AMScd を拡張機能として実装している(他の図式用パッケージは実装されていない)という事情があるので、 MathJax を使う際には重宝するかもしれない。

Five Lemma の例:

\[
  \begin{CD}
     0 @>>>  a  @>>>  b  @>>>  c  @>>>  0 \\
    @.     @VV{f}V  @VV{g}V  @VV{h}V   @. \\
     0 @>>>  a' @>>>  b' @>>>  c' @>>>  0
  \end{CD}
\]

pb-diagram

CTAN: Package pb-diagram

\usepackage{pb-diagram} で使えるようになる。

矢印の向きは n, e, s, w, ne, nw, se, sw などの「方角」で指定する。

\[
  \begin{diagram}
    \node{A} \arrow{e,t}{f} \arrow{s,l}{g} \node{B} \arrow{s} \\
    \node{C} \arrow{e} \node{D}
  \end{diagram}
\]

\[
  \begin{diagram}
    \node[2]{x} \arrow{sw} \arrow{s,..} \arrow{se} \\
    \node{a} \node{a\times b} \arrow{w} \arrow{e} \node{b}
  \end{diagram}
\]

xypic

Xy-pic のホームページ

かなり強力である。

TeX 文書を DVI 経由で処理する場合は、ドライバ指定(dvips, dvipdfmx 等)をした方が、良い結果を得られる(詳しくは以前の記事を参照)。

プリアンブルで\usepackage[all]{xy} とすれば使えるようになるが、代わりに \usepackage[matrix,arrow]{xy} として、使う機能を個別に指定することも可能である。

図式の記述は環境ではなく、 \xymatrix コマンドの引数で行う。非 LaTeX な文書でも使えるようにという配慮であろうか。

\[
  \xymatrix{
    A \ar[r]^{f} \ar[d]_{g} & B \ar[d] \\
    C \ar[r] & D
  }
\]

\[
  \xymatrix{
    & x \ar[ld] \ar@{..>}[d] \ar[rd] & \\
    a & a\times b \ar[l] \ar[r] & b
  }
\]

\[
  \xymatrix{
    x \ar@/_/[ddr] \ar@/^/[rrd] \ar@{..>}[rd] & & \\
    & a \ar[r] \ar[d] & b \ar[d] \\
    & c \ar[r] & d
  }
\]

多分ググれば例や解説がたくさん出てくるので、ここで改めて解説するまでもないだろう。

TODO: XyJax について書く。

tikz-cd

CTAN: Package tikz-cd

今回紹介するものの中では最も後発である(CTAN への登録が2011年9月)。

\usepackage{tikz-cd} または \usepackage{tikz}\usetikzlibrary{cd} で使えるようになる。

図式の部分には tikzcd 環境を使うが、 \[ \] 等で囲わなくても自動で数式モードになる。

矢印には、Xy-pic と同様の \ar の他に、 \arrow を使うことができる。

Xy-pic は矢印の指定に記号を多用していたが、 tikz-cd はそういう箇所に英単語を使うように見受けられる。

\begin{tikzcd}
  A \ar[r, "f"] \arrow[d, "g"'] & B \ar[d] \\
  C \ar[r] & D
\end{tikzcd}

\begin{tikzcd}
  & x \arrow[ld] \arrow[d, dotted] \arrow[rd] & \\
  a & a\times b \arrow[l] \arrow[r] & b
\end{tikzcd}

\begin{tikzcd}
  x \arrow[ddr, bend right] \arrow[rrd, bend left] \arrow[rd, dotted] & & \\
  & a \arrow[r] \arrow[d] & b \arrow[d] \\
  & c \arrow[r] & d
\end{tikzcd}

多分ググればたくさん例や解説が出てくるだろう。

参考リンク

本当はもっと色々調べて書こうと思っていたが、面倒になった。