このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

XyJaxの基本的な使い方

2021年、あけましておめでとうございます。新年とは何ら関係ない記事ですが‥‥

曲がりなりにもブログ記事内でXyJax(XyPic)が使えるようになりました(経緯は以下の記事参照)。

XyJaxの基本的な使い方を記しておきます。内容は、XyPicのユーザーガイドを拾い読みしたメモです。

内容:

マトリックス配置

レイアウトの基本はマトリックス配置です。1行あたりn個のエントリーをm行に配置します。次は、n = 3, m = 2 の例です。

\xymatrix {
A1 & B1 & C1 \\
A2 & B2 & C2
}

$`
\xymatrix {
A1 & B1 & C1 \\
A2 & B2 & C2
}
`$

行の末尾の空エントリーは完全に省略可能です。行の末尾でない空エントリーは、区切り記号 '&' を書く必要があります。

\xymatrix {
A1  \\
  & B2 & C2
}

$`
\xymatrix {
A1 \\
& B2 & C2
}
`$

アロー

エントリーとエントリーのあいだにアロー〈矢印〉を引くことができます。アローの出発点となるエントリーをベースエントリー〈base entry〉、アローの行き先となるエントリーをターゲットエントリー〈target entry〉と呼びます。

アローの記述は、ベースエントリーの場所に \ar コマンドで行います。ターゲットエントリーの指定には、ベースエントリーからターゲットエントリーまでの縦横の移動経路(ホップ〈hop〉と呼ぶ)で指定します。

例えば、A1からC2に向かう矢印を引くには、行き先であるC2へ至る経路(のひとつ)は「下〈down〉、右〈right〉、右〈right〉」なので(下図)、ホップの指定は [drr] となります。d = down, r = right, u = up, l = left です。

$`
\xymatrix {
A1 \ar@{.>}[d]_{down} & B1 & C1 \\
A2 \ar@{.>}[r]^{right}& B2 \ar@{.>}[r]^{right} & C2
}
`$

\xymatrix {
A1 \ar[drr] & B1 & C1 \\
A2          & B2 & C2
}

$`
\xymatrix {
A1 \ar[drr] & B1 & C1 \\
A2 & B2 & C2
}
`$

アロースタイル

アローは、テール〈tail | 根本〉、シャフト〈棒線 | shaft〉、ヘッド〈先端 | head〉の3つの部分からなり、それぞれの部分に形状を指定できます。スタイル指定には、@{テール シャフト ヘッド} の構文を使います。各部の形状の指定には、1,2文字の短い記号列が使われます。

\xymatrix {
A1 \ar@{|-->}[drr] & B1 & C1 \\
A2          & B2 & C2
}

$`
\xymatrix {
A1 \ar@{|-->}[drr] & B1 & C1 \\
A2 & B2 & C2
}
`$

形状指定の例を幾つか挙げます。

$`
\xymatrix@R-1.8pc{
\txt{ 指定なし } & A \ar[r] & B \\
\txt{ @{->} } & A \ar@{->}[r] & B \\
\txt{ @{|->} } & A \ar@{|->}[r] & B \\
\txt{ @{||~>} チルダに注意 } & A \ar@{||~>}[r] & B \\
\txt{ @{<->} } & A \ar@{<->}[r] & B \\
\txt{ @{->|} } & A \ar@{>|}[r] & B \\
\txt{ @{.>} } & A \ar@{.>}[r] & B \\
\txt{ @{} } & A \ar@{}[r] & B \\
}
`$

ハープーン〈銛形〉と二重シャフト/三重シャフトは、アローのバリアント〈variant | 変種〉と呼び @バリアント{スタイル} の構文で書きます。

$`
\xymatrix@R-1.8pc{
\txt{ @{->} } & A \ar@{->}[r] & B \\
\txt{ @^{->} } & A \ar@^{->}[r] & B \\
\txt{ @_{->} } & A \ar@_{->}[r] & B \\
\txt{ @2{->|} } & A \ar@2{->}[r] & B \\
\txt{ @3{->} } & A \ar@3{->}[r] & B \\
}
`$

アローの一部にだけバリアントを適用することもできます。包含写像を表す矢印は次のように指定します。

$`
\xymatrix@1{
\txt{ @{^{(}->} } & A \ar@{^{(}->}[r] & B \\
}
`$

なお、二重矢印は @{=>} でも描けます。その他、利用できる形状指定とバリアント、それらの組み合わせ方はXyPicのマニュアルを参照してください。

アローのラベル

アローのラベルは、\ar コマンドのホップの後に指定します。ラベルの位置を示す '^', '_' を先頭に置きます。

  • \ar[r]^ラベル : 上側にラベル
  • \ar[r]_ラベル : 下側にラベル
\xymatrix{
A \ar[r]^{label} & B \\
C \ar[r]_{label} & D
}

$`
\xymatrix{
A \ar[r]^{label} & B \\
C \ar[r]_{label} & D
}
`$

上側、下側と言いましたが、これは紙面や画面に対する上下ではなくて、矢印の方向を左から右としたときの上下です。矢印が上から下へ向かうなら、“上側”は右側です。

\xymatrix{
A \ar[r]^{top} \ar[d]_{left}  & B \ar[d]^{right} \\
C \ar[r]_{bottom}  & D
}

$`
\xymatrix{
A \ar[r]^{top} \ar[d]_{left} & B \ar[d]^{right} \\
C \ar[r]_{bottom} & D
}
`$

ラベルを、アローを割って挿入することができます。|ラベル の構文を使います。

\xymatrix{
A \ar[r]|{top} \ar[d]|{left} \ar[dr]|{diag} & B \ar[d]|{right} \\
C \ar[r]|{bottom}  & D
}

$`
\xymatrix{
A \ar[r]|{top} \ar[d]|{left} \ar[dr]|{diag} & B \ar[d]|{right} \\
C \ar[r]|{bottom} & D
}
`$

ラベルに比べてアローの長さが短か過ぎますが、調整法は後述します。

アローを割ったところに空白を入れるには \hole というコマンドを使います。

\xymatrix{
  A \ar[r]|\hole & B
}

$`
\xymatrix{
A \ar[r]|\hole & B
}
`$

もちろん、ラベル内でTeXコードを使えます。

\xymatrix{
A\times B \ar[r]^{\pi_{A,B}^1} & B
}

$`
\xymatrix{
A\times B \ar[r]^{\pi_{A,B}^1} & B
}
`$

この例で、ラベルの位置が左過ぎです。次節で調整法を述べます。

ラベルの位置

デフォルトでは、アローのラベルはベースエントリー/ターゲットエントリーも含めた寸法の真ん中の位置に置かれます。前節最後のラベルが左過ぎるのは、ベースエントリーの領域が広いからです。アロー自体の中央にラベルを置くには \ar[r]^-ラベル と、ラベルの直前にマイナスを付けます。

\xymatrix{
A\times B \ar[r]^-{\pi_{A,B}^1} & B
}

$`
\xymatrix{
A\times B \ar[r]^-{\pi_{A,B}^1} & B
}
`$

マイナス記号はプレース〈place〉指定子のひとつで、他に次のようなプレース指定子があります。

$`
\xymatrix@R-1.8pc{
\txt{^<{\bullet}} & A \ar[r]^<{\bullet} & B \\
\txt{^>{\bullet}} & A \ar[r]^>{\bullet} & B \\
\txt{^<<{\bullet}} & A \ar[r]^<<{\bullet} & B \\
\txt{^>>{\bullet}} & A \ar[r]^>>{\bullet} & B
}
`$

寸法の数値を使ってラベル位置のより細かい制御もできます(割愛)。

アローのカーブと自己ループ

異なるエントリーを結ぶアローをカーブさせるには、@/^/@/_/ を使います。

\xymatrix{
 A \ar@/^/[r] \ar@/_/[r] & B \\
 C \ar@/^/[u]  & D \ar@/_/[u]
}

$`
\xymatrix{
A \ar@/^/[r] \ar@/_/[r] & B \\
C \ar@/^/[u] & D \ar@/_/[u]
}
`$

例によって '^' が上側、'_' が下側を意味しますが、アローの進行方向に対して反時計回りに90度の方向が“上側”で、上側の反対方向が“下側”です。

自己ループ、つまりベースエントリーとターゲットエントリーが同じアローを \ar[​] とだけ指定してもうまくいきません。@(出る方向,入る方向) という特別な指定をします。方向は、u, d, l, r 以外に、斜め方向として ur, ul, dl, dr が使えます。

例えば、上左方向(ul)から出て下左方向(dl)から戻って来るアローは次のように書きます。

\xymatrix{
 A \ar@(ul, dl)[]|{id}
}

$`
\xymatrix{
A \ar@(ul, dl)[]|{id}
}
`$

平行なアロー

カーブを使うと交わらない平行なアローを作れますが、まっすぐなアローを平行に並べるには位置をずらす必要があります。“上下”に位置をずらすには、@<寸法> で修飾します。寸法がプラスなら“上”に、寸法がマイナスなら“下”にアローがずれます。

\xymatrix{
 A \ar@<0.5em>[r] \ar@{.>}@<-0.5em>[r] & B \ar@<0.5em>[d] \ar@{.>}@<-0.5em>[d] \\
 & C
}

$`
\xymatrix{
A \ar@<0.5em>[r] \ar@{.>}@<-0.5em>[r] & B \ar@<0.5em>[d] \ar@{.>}@<-0.5em>[d] \\
& C
}
`$

次は2本以上の平行アローの例です。

\xymatrix{
   {\Delta^0} \ar[r]
 & {\Delta^1} \ar@<0.3em>[l] \ar@<-0.3em>[l] \ar@<0.3em>[r] \ar@<-0.3em>[r]
 & {\Delta^2} \ar[l] \ar@<0.6em>[l] \ar@<-0.6em>[l] \ar@{.}[r]
 & 
}

$`
\xymatrix{
{\Delta^0} \ar[r]
& {\Delta^1} \ar@<0.3em>[l] \ar@<-0.3em>[l] \ar@<0.3em>[r] \ar@<-0.3em>[r]
& {\Delta^2} \ar[l] \ar@<0.6em>[l] \ar@<-0.6em>[l] \ar@{.}[r]
&
}
`$

列間と行間の寸法

マトリックス配置の列間寸法と行間寸法を指定できます。\xymatrix コマンドの直後に間隔〈spacing〉指定を入れます。

  • @R=寸法 行間寸法指定
  • @C=寸法 列間寸法指定

デフォルトに対する相対的な増減は次の構文です。

  • @R+寸法 行間寸法増加分指定
  • @C+寸法 列間寸法増加分指定
  • @R-寸法 行間寸法減少分指定
  • @C-寸法 列間寸法減少分指定
\xymatrix@C+2pc@R+1pc{
A \ar[r]^{top} \ar[d]_{left} \ar[dr]|{diag} & B \ar[d]^{right} \\
C \ar[r]_{bottom}  & D
}

$`
\xymatrix@C+2pc@R+1pc{
A \ar[r]|{top} \ar[d]|{left} \ar[dr]|{diag} & B \ar[d]|{right} \\
C \ar[r]|{bottom} & D
}
`$

おわりに

XyJaxは豊富な機能を備えたMathJax拡張で、まだ紹介してない機能がたくさんあります。が、この記事で紹介した基本的な使い方だけでも、けっこう描画ができると思います。何か足りないと思ったら、XyJax/XyPicのマニュアルを探すと必要な機能が見つかることが多いでしょう。

もし、ここでは書いてなくて便利でよく使う機能が出てきたら、そのときはまた紹介します。