可換図式(tikz-cd / amscd)

可換図式(commutative diagram)は、対象を点として配き、それらを結ぶ写像を矢印で表した図で、「どの経路をたどっても合成が等しい」ことを目で示すものです。LaTeX でこれを組む道具は二つに大別されます。TikZ の上に作られた強力な **tikz-cd と、AMS 製でより簡素な amscd** です。このページでは、可換正方形(最も基本的な図)を両者でそれぞれ組みながら、矢印の向き・ラベル・線種の付け方を整理し、どちらを選ぶべきかを比べます。

可換図式とは

可換図式は、代数・圏論・位相幾何などで関係を一目で伝えるために広く使われます。最小の例が 可換正方形 です。四隅に対象 A, B, C, D を置き、上辺に写像 f(A から B へ)、下辺に g(C から D へ)、左辺に写像(A から C へ)、右辺に写像(B から D へ)を矢印で描きます。「正方形が可換である」とは、A から D へ至る二つの経路——上辺を通って右辺を下る合成と、左辺を下って下辺を通る合成——が同じ写像になる、という主張に他なりません。

図そのものは数式の一種なので、ふつうは別行立ての数式環境(\[\]equation 環境)の中に置きます。組む道具としては歴史的に多くのパッケージ(xy/xypicdiagrams など)が作られてきましたが、現在の事実上の標準は **tikz-cd です。曲線・斜め矢印・三段以上の複雑な図まで自在に描けます。一方、長方形の単純な図で十分なら、AMS の amscd** が手軽です。以下、両者を順に見ていきます。

tikz-cd —— 現代的な選択

tikz-cd は、汎用作図パッケージ TikZ を可換図式向けに整えたものです。プリアンブルで \usepackage{tikz-cd} と読み込むと(あるいは TikZ を読み込んだうえで \usetikzlibrary{cd} でも可)、tikzcd 環境が使えます。この環境の中身は LaTeX の tabular と同じく 行列(マトリクス) として書きます。すなわち、セルを & で横に区切り、\\ で行を改めます。各セルが図の「対象」を置く節点になり、すべて自動的に数式モードで組まれます。

対象どうしを結ぶ矢印は **\arrow 命令で描きます。短い別名 \ar** もまったく同じ働きです。矢印を出したいセル(始点)に \arrow[…] と書き、角括弧の中で行き先と装飾を指定します。行き先は 方向キー で与えます。r が右(right)、l が左(left)、u が上(up)、d が下(down)。これらは文字列として連ねられ、たとえば [rd] は「右下の隣のセルへ」(斜め)を表します。

矢印にラベル(写像の名前)を付けるには、オプションの中に 引用符でくくった文字列 を書きます。\arrow[r, "f"] は「右の隣へ向かう、ラベル f 付きの矢印」です。ラベルは既定で矢印の左側(進行方向に向かって左)に置かれますが、ラベル文字列の直後に **アポストロフィ '** を付けると反対側に移ります("g"' のように書く)。一つの矢印に複数のラベルを付けることもでき、"f" near start のように位置を細かく指定できます。次は、典型的な使い方を示す簡単な例です。

latex
\[
\begin{tikzcd}
  A \arrow[r, "\phi"] \arrow[rd] & B \\
  & C
\end{tikzcd}
\]

この図は、左上に A、右上に B、右下に C を置き、A から右の B へラベル φ 付きの水平矢印が伸び、同時に A から右下の C へ斜めの矢印が下りる、という形になります。\arrow[r, "\phi"]\arrow[rd] を同じセル A に並べて書いている点に注目してください。一つのセルから何本でも矢印を出せます。

これを踏まえて、冒頭で述べた 可換正方形 を組んでみましょう。四隅 A, B, C, D を 2 行 2 列の行列として置き、A から右へ f、A から下へ(左辺)、B から下へ(右辺)、C から右へ g の四本の矢印を描きます。

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

これは、A・B・C・D を四隅に配した正方形で、上辺に右向きの f、下辺に右向きの g、左辺に下向きの α、右辺に下向きの β が描かれた図になります。各ラベルは既定の側(矢印の進行方向に向かって左)に置かれます。たとえば右辺の β を反対側(外側)に出したいときは \arrow[d, "\beta"'] と書きます。なお tikzcd 環境の内側は数式モードなので、ラベルに普通の語句を入れたいときは tikz-cd のラベルオプション内で \text{…}(amsmath)を使います。

tikz-cd の最大の強みは、矢印の見た目を細かく変えられる ことです。線種・矢じり・曲げ方は、\arrow のオプションにスタイルキーを足すだけで切り替わります。代表的なものを次の表にまとめます。複数を同時に指定でき(\arrow[r, tail, two heads, dashed] のように)、組み合わせられます。

キー効果
hook始点側にフック(⊂)を付け、包含・単射を表す
two heads矢じりを二重にし、全射を表す
tail始点に尾を付ける(単射の別表記)
dashed破線にする(しばしば「一意に存在する写像」を表す)
dotted点線にする(TikZ 由来のキー)
equal矢印の代わりに二重線(等号)を引く
bend left矢印を左へ弧を描いて曲げる(bend left=20 で角度指定)
bend right矢印を右へ弧を描いて曲げる

同型を示す \sim\simeq をラベルとして矢印に載せることもよく行われます。たとえば \arrow[r, dashed, "\simeq"] は、破線の矢印の上に同型記号 ≃ を置きます。二つの対象の間に弧を二本描いて区別したいときは bend leftbend right を使い分けます。tikz-cd は TikZ のキー(color=…dottedin=…out=… など)もそのまま受け付けるため、表現の幅は事実上 TikZ 全体に及びます。

注意点として、tikzcd 環境の図は DVI ビューアでは正しく表示されません。PDF を直接生成する pdflatexlualatexxelatex、あるいは DVI を PDF/PS に変換する経路で組んでください。また \arrow には、引用符記法が登場する前の旧書式 \arrow[…]{方向}ラベル(例: \arrow{r}{f})もあり、後方互換のため今も使えますが、新規には引用符記法が読みやすく推奨されます。

amscd —— AMS の簡素な CD 環境

amscd は AMS-TeX の可換図式機能を LaTeX へ移植したパッケージで、プリアンブルで \usepackage{amscd} と読み込みます。提供されるのは **CD 環境** ただ一つ。tikz-cd と同じく中身を &\\ で行列として書きますが、こちらは外部パッケージ(TikZ)に依存せず、TeX の組版だけで動くため軽量です。ただし設計が簡素で、水平・垂直の矢印しか引けません(後述)。

矢印は、すべて記号 **@** で始まる特別な綴りで書きます。横向きの矢印は @>>>(右向き)と @<<<(左向き)、縦向きの矢印は @VVV(下向き、V は vertical の V)と @AAA(上向き、A は arrow を上向きに見立てた A)です。等号(二重線)は横が @=、縦が @|(または @\vert)。そして矢印を引かずに空けておきたい格子点には @.(ドット)を置きます。横の矢印は対象の間(同じ行の & の位置)に、縦の矢印は対象の真下の行に書く、という対応になっています。

ラベルは、矢印を表す文字の 間に挟んで 書きます。横向きの @>>> は三つの > の区切りに二つの差し込み口があり、最初の口(@> の直後)に書いた文字列が矢印の に、二番目の口に書いた文字列が に来ます。つまり @>f>> は上に f、@>>g> は下に g、@>f>g> は上に f・下に g。縦向きの @VVV も同様で、@VfVV は下向き矢印の に f、@VVfV に f を置きます(@AAA も同じ規則)。

次は、AMS の amscd マニュアルにある可換正方形の例です。\End が作用素名(\operatorname 相当)として定義されている前提です。

latex
\[
\begin{CD}
  S^{{\mathcal{W}}_\Lambda}\otimes T  @>j>>  T \\
  @VVV                                @VV{\End P}V \\
  (S\otimes T)/I                     @=  (Z\otimes T)/J
\end{CD}
\]

この図は、上の行で左の対象から右の T へ、ラベル j を上に付けた水平矢印が伸びます。中央の行(@VVV@VV{\End P}V)が縦の矢印を作り、左列は無ラベルの下向き矢印、右列は右側にラベル End P を付けた下向き矢印になります。下の行では二つの対象が @=(二重線の等号)で結ばれます。ラベルに波括弧 {\End P} を使っているのは、複数トークンのラベルを一つにまとめるためです。

amscd で本ページ冒頭の f・g・α・β による可換正方形を組むと、次のようになります。左辺・右辺の縦矢印のラベルは、上で述べたとおり最初の差し込み口(左側)に置いています。

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

これは、A・B・C・D を四隅に置き、上辺に右向き矢印 f、下辺に右向き矢印 g、左辺に下向き矢印 α、右辺に下向き矢印 β を描いた正方形になります。tikz-cd の例とまったく同じ図ですが、記法が @ 綴りである点だけが異なります。なお amscdCD 環境は数式モードなので、これも別行立ての数式の中に置きます(上では \[\] を使用)。

どちらを使うか

二つのパッケージは守備範囲がはっきり違います。amscdCD 環境は 格子状(長方形)の図だけ を扱い、AMS のマニュアル自身が「単純な長方形の図のみを対象とし、斜め矢印やより凝った機能はない」と明記しています。これが最大の制約です。対角線の矢印・曲線・三段以上の入り組んだ図が要るなら amscd では描けず、tikz-cd(あるいは xy 系)を使うことになります。

  • 斜め矢印・曲線が要るtikz-cdamscd は水平・垂直のみで、斜めは引けません。
  • 矢じりや線種を細かく変えたい(単射 hook、全射 two heads、破線、二重線など) → tikz-cd
  • 単純な長方形の図で十分/依存を軽くしたいamscd。TikZ を読み込まず、軽量で素早い。
  • 記法の好み: amscd@>>> 綴りは簡潔だが独特。tikz-cd\arrow[r, "f"] は冗長だが読み手に明快。
  • 出力経路: tikz-cd は DVI ビューアで正しく表示されないため、PDF を直接生成するエンジン(pdfLaTeX 等)が前提。amscd にはその制約がない。

迷ったときの目安はこうです。論文の中にときどき長方形の図が出る程度なら、追加の依存もなく素早く組める amscd で十分。図が主役で、斜めの射・曲線・凝った矢じりを多用するなら tikz-cd を選びます。なお、ごく単純な「A → B」程度であれば、図式環境を持ち出さず、\xrightarrow{f}(amsmath)のような行内コマンドで足りることも多い点は覚えておくとよいでしょう。