自分はこのために XY-pic というグラフィックスパッケージを使っている. これ自体で図式は描けるのだが複雑なので, 図式を描くことに特化した xymatrix という XY-pic のマクロパッケージがある.
xymatrix パッケージは習得も早く使いやすいので現在でも使っている.
\begin{equation*}
\begin{xy}
\xymatrix@=48pt {
X \ar[r]^{h} \ar[d]_{f} & X' \ar[d]^{g} \\
Y \ar[r]_{k} & Y'
}
\end{xy}
\end{equation*}
のような図式を描くには大雑把には
\xymatrix {
X \ar[r]^{h} \ar[d]_{f} & X' \ar[d]^{g} \\
Y \ar[r]_{k} & Y'
}
のように記述すればよい.
しかしちょっと前から xymatrix の代わりに diagxy というパッケージを使い始めた. diagxy パッケージも XY-pic のマクロパッケージだが, 図式の形, 矢印の形状や記号の配置などの自由度が高い. そのために凝った図式を描く場合に利点がある.
実際に使い始めてみるとなかなか複雑で, 正直うんざりしてきていたのだが今日わかったことがある.
実は diagxy というのは射にあたる矢印を描く
\morphism(x,y)|p|/{sh}/<dx,dy>[N`N;L]
という命令だけ使いこなせば良い.
ここで $(x,y)$ は矢印の始点で, 終点は $(x+dx,y+dy)$ で与えられる.
$|p|$ は射のどの位置に記号 ($f$ とか $g$ とか) を配置するかを指定する ($a$: 射の上; $b$: 射の下; $l$: 射の左; $r$: 射の右; $m$: 射の真ん中).
$/\{sh\}/$ は射の形状を指定する. たとえば $\to$ のような形状は $/>/$ で指定できる.
$[N`N;L]$ は射のソースとターゲット, それから射の名前を指定する.
だから
\begin{equation*}
\begin{xy}
\xymatrix@=48pt {
X \ar[r]^{f} & Y
}
\end{xy}
\end{equation*}
というような射は
\morphism(0,0)|a|/>/<700,0>[X`Y;f]
のように記述すれば描ける.
他の命令はすべて
\morphism
命令を組み合わせて名前を付けて作られている.こう考えると楽だ. 全体の見通しがよくなる.
時間は非常にかかったがやっと一歩進む. いつものことだがとにかく時間がかかるのだ.