Xy-pic(xymatrix )の使い方
目次
より詳しくは, Xy-pic の配布物に含まれる User's Guide (xyguide.pdf) 等を 参照のこと.
1 基本
1.1 読み込み
Xy-pic を使用するためには, まず Xy-pic を読み込む必要がある.
具体的には \usepackage[all]{xy} という一行を
\begin{document} の前に書く.
またdefaultではxymatrix中の数式は文中数式モードになるようなので
\def\objectstyle{\displaystyle} を書いておいた方が使いやす
いかもしれない.
\documentclass[12pt]{jarticle}
\usepackage{amsmath,amsfonts,amsthm,amssymb,amscd}
\usepackage[all]{xy}
\def\objectstyle{\displaystyle}
\begin{document}
1.2 項目の配置
\[
\xymatrix{
A & B & C \\
D & E & \\
& F & G
}
\]
\[ \xymatrix{ A & B & C \\ D & E & \\ & F & G } \]
1.3 矢印
矢印は, その矢印の出発点である項目の後に \ar[方向] .
方向は r,l,u,d の組み合わせ.
\[
\xymatrix{
A \ar[r] \ar[rrd] & B & \ar[d] \\
C \ar[u] & A \ar[l] \ar[lu] & D
}
\]
\[ \xymatrix{ A \ar[r] \ar[rrd] & B & \ar[d] \\ C \ar[u] & A \ar[l] \ar[lu] & D } \]
1.4 ラベル
矢印にラベルをつける. 位置は ^,_,| で指定. 矢印の向きとラベルのつく位置に注意.
\[
\xymatrix{
A \ar[r]^f & B \ar[d]^f
& A \ar[r]_{g_1} & B \ar[d]_{g_1}
& A \ar[r]|h & B \ar[d]|h \\
D \ar[u]^f & C \ar[l]^f
& D \ar[u]_{g_1} & C \ar[l]_{g_1}
& D \ar[u]|h & C \ar[l]|h
}
\]
\[ \xymatrix{ A \ar[r]^f & B \ar[d]^f & A \ar[r]_{g_1} & B \ar[d]_{g_1} & A \ar[r]|h & B \ar[d]|h \\ D \ar[u]^f & C \ar[l]^f & D \ar[u]_{g_1} & C \ar[l]_{g_1} & D \ar[u]|h & C \ar[l]|h } \]
2 矢印
2.1 ラベルの位置
項目のサイズによっては矢印のラベルの位置がずれる.
\[
\xymatrix{
A \ar[r]^f & BCDEFGH
}
\]
\[ \xymatrix{ A \ar[r]^f & BCDEFGH } \]
ラベルの前に - をつけると自動で調整してくれる.
特に位置を指定する必要の無い場合は常に - をつけるようにするとよいだろう.
\[
\xymatrix{
A \ar[r]^-f & BCDEFGH
}
\]
\[ \xymatrix{ A \ar[r]^-f & BCDEFGH } \]
ラベルの前に (.数字) で位置を指定することも出来る.
\[
\xymatrix{
A \ar[r]^(.2)f_(.25)g & BCDEFGH
}
\]
\[ \xymatrix{ A \ar[r]^(.2)f_(.25)g & BCDEFGH } \]
2.2 いろいろな矢印
\ar@{スタイル}[方向] でいろいろな矢印が書ける. どのようなスタイル
が使えるかについては xyguide 等を参考のこと.
\[
\xymatrix{
A \ar@{=}[r]
& A \ar@{.>}[r]
& B \ar@{->>}[r] & C \\
D \ar@{|-^{>}}[r]
& E \ar@{^{(}-_{>}}[r]
& F \ar@{>->}[r] & G
}
\]
\[ \xymatrix{ A \ar@{=}[r] & A \ar@{.>}[r] & B \ar@{->>}[r] & C \\ D \ar@{|-^{>}}[r] & E \ar@{^{(}-_{>}}[r] & F \ar@{>->}[r] & G } \]
2.3 スライドする
矢印を平行に移動するには \ar@<移動量>[方向] とする. 上記のいろいろ
な矢印と併用するときは \ar@<移動量>@{スタイル}[方向] 等とする.
移動量とスタイルの順序はどちらでもよいようだ.
\[
\xymatrix{
A \ar[r]^-f
& B \ar@<-0.5ex>[r]_-f
& C \ar@<1ex>[r]^-f
& D \ar@<0.5ex>[d]^-f \\
E \ar@<-0.3ex>@{^{(}->}[r]^-f
& F \ar@{_{(}->}@<0.3ex>[r]^-f
& G \ar@<0.5ex>[r]^-f \ar@<-0.5ex>[r]_-g
& H \ar@<0.5ex>[u]^-g
}
\]
\[ \xymatrix{ A \ar[r]^-f & B \ar@<-0.5ex>[r]_-f & C \ar@<1ex>[r]^-f & D \ar@<0.5ex>[d]^-f \\ E \ar@<-0.3ex>@{^{(}->}[r]^-f & F \ar@{_{(}->}@<0.3ex>[r]^-f & G \ar@<0.5ex>[r]^-f \ar@<-0.5ex>[r]_-g & H \ar@<0.5ex>[u]^-g } \]
2.4 穴を空ける
\ar[方向]|\hole で穴が空く. 穴の位置の指定はラベルの位置の指定と同
じ.
\[
\xymatrix{
A \ar[r] \ar[d] \ar[rrd]
& B \ar[rrd]|f \ar[d]|\hole \ar[rdd]|(.33)\hole & & \\
C \ar[r] \ar[rrd] & D \ar[rrd]|(.33)\hole|\hole
& A' \ar[r] \ar[d] & B' \ar[d] \\
& & C' \ar[r] & D'
}
\]
\[ \xymatrix{ A \ar[r] \ar[d] \ar[rrd] & B \ar[rrd]|f \ar[d]|\hole \ar[rdd]|(.33)\hole & & \\ C \ar[r] \ar[rrd] & D \ar[rrd]|(.33)\hole|\hole & A' \ar[r] \ar[d] & B' \ar[d] \\ & & C' \ar[r] & D' } \]
上では穴の位置を (.33) というように数値で指定したが,
D \ar[rrd]|!{[u];[rd]}\hole 等のような指定もできる. この場合,
スタート位置 \(D\) の上(u) \(B\) から右下(rd) \(C'\) への矢印とこの矢印との交点に穴が空く.
(曲がった矢印の場合はうまくいかない.)
\[
\xymatrix{
A \ar[r] \ar[d] \ar[rrd]
& B \ar[rrd]|f \ar[d]|\hole \ar[rdd]|!{[l];[rd]}\hole & & \\
C \ar[r] \ar[rrd] & D \ar[rrd]|!{[u];[rd]}\hole|\hole
& A' \ar[r] \ar[d] & B' \ar[d] \\
& & C' \ar[r] & D'
}
\]
\[ \xymatrix{ A \ar[r] \ar[d] \ar[rrd] & B \ar[rrd]|f \ar[d]|\hole \ar[rdd]|!{[l];[rd]}\hole & & \\ C \ar[r] \ar[rrd] & D \ar[rrd]|!{[u];[rd]}\hole|\hole & A' \ar[r] \ar[d] & B' \ar[d] \\ & & C' \ar[r] & D' } \]
2.5 曲げる
\ar@/^曲げる量/[方向] で進行方向左側に,
\ar@/_曲げる量/[方向] で進行方向右側にふくらんだ矢印になる.
\[
\xymatrix{
A \ar@/^18pt/[r]^f \ar@/_/[r]_g
\ar@/_3pt/[d] \ar@/_12pt/[d] \ar@/_24pt/[d] \ar@/_48pt/[d]
& B \ar@/^/[d] \ar@/^54pt/[rd] & C \ar[l] \ar[d] \\
D \ar@/_10pt/@{.>}[rr]_{\exists h} & E \ar[r] \ar[l] & F
}
\]
\[ \xymatrix{ A \ar@/^18pt/[r]^f \ar@/_/[r]_g \ar@/_3pt/[d] \ar@/_12pt/[d] \ar@/_24pt/[d] \ar@/_48pt/[d] & B \ar@/^/[d] \ar@/^54pt/[rd] & C \ar[l] \ar[d] \\ D \ar@/_10pt/@{.>}[rr]_{\exists h} & E \ar[r] \ar[l] & F } \]
3 サイズ等
3.1 行間列間のサイズを変える
@R= で行間, @C= で列間のサ
イズを指定. @= で行間列間のサイズを一斉に指定.
\[
\xymatrix@C=36pt@R=6pt{
A \ar[r] \ar[d] & B \ar[r] & C \ar[ld] \\
D \ar[r] & E & \\
}
\]
\[
\xymatrix@=10pt{
A \ar[r] \ar[d] & B \ar[r] & C \ar[ld] \\
D \ar[r] & E & \\
}
\]
\[ \xymatrix@C=36pt@R=6pt{ A \ar[r] \ar[d] & B \ar[r] & C \ar[ld] \\ D \ar[r] & E & \\ } \]
\[ \xymatrix@=10pt{ A \ar[r] \ar[d] & B \ar[r] & C \ar[ld] \\ D \ar[r] & E & \\ } \]
3.2 強制的に行間列間をそろえる
特に何も指定しなければ, 項目のサイズに合わせて適当に行間列間を調整してくれるが,
行間列間をそろえたい場合は @!,@!R,@!C を使うとよい.
@!=サイズ 等でサイズの指定も可.
\[
\xymatrix{
& A \ar[ld] \ar[d] \ar[rd] & \\
B & C & DDDDDDDD
}
\]
\[
\xymatrix@!C{
& A \ar[ld] \ar[d] \ar[rd] & \\
B & C & DDDDDDDD
}
\]
\[
\xymatrix@!C=24pt{
& A \ar[ld] \ar[d] \ar[rd] & \\
B & C & DDDDDDDD
}
\]
\[ \xymatrix{ & A \ar[ld] \ar[d] \ar[rd] & \\ B & C & DDDDDDDD } \]
\[ \xymatrix@!C{ & A \ar[ld] \ar[d] \ar[rd] & \\ B & C & DDDDDDDD } \]
\[ \xymatrix@!C=24pt{ & A \ar[ld] \ar[d] \ar[rd] & \\ B & C & DDDDDDDD } \]
3.3 項目の余白
@M= で余白のサイズを指定.
\[
\xymatrix{
A \ar[r] & B \ar@{>->}[r] & C
}
\]
\[
\xymatrix@M=8pt{
A \ar[r] & B \ar@{>->}[r] & C
}
\]
\[ \xymatrix{ A \ar[r] & B \ar@{>->}[r] & C } \]
\[ \xymatrix@M=8pt{ A \ar[r] & B \ar@{>->}[r] & C } \]
3.4 項目やラベルのサイズ
\def\objectstyle{サイズの指定} で項目の,
\def\labelstyle{サイズの指定} でラベルのサイズを変更出来る.
サイズの指定にどのようなものが使えるのかはよくわからない.
\[
\def\objectstyle{\scriptstyle}
\def\labelstyle{\scriptscriptstyle}
\xymatrix{
A \ar[r]^f \ar[d] & B \ar[d] \\
C \ar[r] & D &
}
\]
\[ \def\objectstyle{\scriptstyle} \def\labelstyle{\scriptscriptstyle} \xymatrix{ A \ar[r]^f \ar[d] & B \ar[d] \\ C \ar[r] & D & } \]
3.5 回転
@方向 で図式を, 左上の項目を中心に, 回転させることが
出来る. 方向は ur u ul l dl d dr で指定するようだ.
\[
\xymatrix@ur{
A \ar[r]^f \ar[d] & B \ar[d] \\
C \ar[r] & D &
}
\]
\[ \xymatrix@ur{ A \ar[r]^f \ar[d] & B \ar[d] \\ C \ar[r] & D & } \]
4 Tips
4.1 数式番号
xymatrixでかいた図式に数式番号をつけるときは \vcenter を使うとよい
かもしれない.
\verb+\vcenter+ をつけない場合
\begin{equation}
\xymatrix{
A \ar[r] \ar[d] & B \ar[d] \\
C \ar[r] & D \ar@{}[lu]|{\circlearrowright}
}
\end{equation}
つけた場合
\begin{equation}
\vcenter{
\xymatrix{
A \ar[r] \ar[d] & B \ar[d] \\
C \ar[r] & D \ar@{}[lu]|{\circlearrowright}
}
}
\end{equation}
\vcenter をつけない場合
つけた場合
\begin{equation} \vcenter{ \xymatrix{ A \ar[r] \ar[d] & B \ar[d] \\ C \ar[r] & D \ar@{}[lu]|{\circlearrowright} } } \end{equation}4.2 平行な矢印
平行な矢印をたくさん使う場合は以下のようなマクロを用意すると便利.
\newcommand{\prarrow}[2]{\ar@<0.5ex>[r]^-{#1} \ar@<-0.5ex>[r]_-{#2}}
\newcommand{\plarrow}[2]{\ar@<0.5ex>[l]^-{#1} \ar@<-0.5ex>[l]_-{#2}}
\newcommand{\pdarrow}[2]{\ar@<0.5ex>[d]^-{#1} \ar@<-0.5ex>[d]_-{#2}}
\newcommand{\puarrow}[2]{\ar@<0.5ex>[u]^-{#1} \ar@<-0.5ex>[u]_-{#2}}
\[
\xymatrix{
A \prarrow{f}{g} \pdarrow{h}{k} & B \\
C & D \plarrow{u}{v} \puarrow{s}{t}
}
\]
\[ \xymatrix{ A \ar@<.5ex>[r]^-{f} \ar@<-0.5ex>[r]_-{g} \ar@<.5ex>[d]^-{h} \ar@<-0.5ex>[d]_-{k} & B \\ C & D \ar@<.5ex>[l]^-{u} \ar@<-0.5ex>[l]_-{v} \ar@<.5ex>[u]^-{s} \ar@<-0.5ex>[u]_-{t} } \]
本文中で使うには以下のようにマクロに \xymatrix をいれたものの方が便利だろう.
1行からなる図式を書くときには, ここに出ている @1 という指定をすると
よいそうである.
\newcommand{\paar}[3]{
\xymatrix@1{
#1 \ar@<0.5ex>[r]^-{{#2}_1}\ar@<-0.5ex>[r]_-{{#2}_2} & #3
}
}
\newcommand{\paaar}[3]{\xymatrix{#1 \ar@<0.5ex>[r]^-{{#2}_1}
\ar@<-0.5ex>[r]_-{{#2}_2} & #3}}
\verb+@1+を指定したもの$\paar{A}{f}{B}$と,
指定していないもの$\paaar{A}{f}{B}$
はこのようになるが, どうであろうか.
@1 を指定したもの
\(\xymatrix@1{A \ar@<0.5ex>[r]^-{{f}_1}\ar@<-0.5ex>[r]_-{{f}_2} & B }\) と,
指定していないもの
\(\xymatrix{A \ar@<0.5ex>[r]^-{{f}_1}\ar@<-0.5ex>[r]_-{{f}_2} & B }\)
はこのようになるが, どうであろうか.
4.3 \(\prod\) 等
\(\prod\) や \(\varinjlim\) の添字が下だけにつく際にバランスが悪くなる場合があり, 適当なマクロを作って使っていたが, version 3.8 以降の Xy-pic では特に調整する必要はないようだ.
4.4 包含射の一例
\[
\xymatrix@=18pt{
S\times_XY \ar[rr] \ar@{}[d]|{\bigcap} & & S \ar@{}[d]|{\bigcap} \\
Y \ar[r] & R \ar@{}[r]|*{\subset} & X.
}
\]
\[ \xymatrix@=18pt{ S\times_XY \ar[rr] \ar@{}[d]|{\bigcap} & & S \ar@{}[d]|{\bigcap} \\ Y \ar[r] & R \ar@{}[r]|*{\subset} & X. } \]
4.5 いろいろ
\[
\def\objectstyle{\scriptstyle}
\def\labelstyle{\scriptstyle}
Z \cong \lim\left(
\vcenter{
\hbox{
$
\underbrace{
\xymatrix@C=6pt{
& & X \ar[lld] \ar[ld] \ar@{}[d]|(.6){\dots} \ar[rd] \ar[rrd]
& & \\
Y & Y & \dots\dots & Y & Y
}
}_n
$
}
}\right)
\]
\[ \def\objectstyle{\scriptstyle} \def\labelstyle{\scriptstyle} Z \cong \lim\left( \vcenter{ \hbox{ $ \underbrace{ \xymatrix@C=6pt{ & & X \ar[lld] \ar[ld] \ar@{}[d]|(.6){\dots} \ar[rd] \ar[rrd] & & \\ Y & Y & \dots\dots & Y & Y } }_n $ } }\right) \]