tikz-cdで(というかもう殆どTikZで)蛇の補題を描く.
結論
Wikipediaにある図を描いてみました.(tikz-cdのマニュアルを参考にしています.)
%\usepackage{amsmath}
%\DeclareMathOperator{\Ker}{Ker}
%\DeclareMathOperator{\Coker}{Coker}
\begin{tikzcd}
& \Ker a \arrow[r]\arrow[d]
& \Ker b \arrow[r]\arrow[d]
& \Ker c \arrow[d]\\
& A \arrow[r,"f"]\arrow[d,"a" near start]
& B \arrow[r,"g"]\arrow[d,"b" near start]
% BからB'にダミーの矢印を引き,その中点の名前をZとする.
\arrow[d, phantom, ""{coordinate, name=Z}]
& C \arrow[r]\arrow[d,"c" near start]
% 二つの0にX,Yという名前を与えておく
& |[alias=X]|0 \\[2ex] % ここの縦方向の空きを少し広げておく
|[alias=Y]|0\arrow[r]
& A' \arrow[r,"f'"]\arrow[d]
& B' \arrow[r,"g'"]\arrow[d]
& C'\arrow[d]\\
& \Coker a\arrow[r]
\arrow[from=uuurr,crossing over,"d" at end,
rounded corners,% 角を丸める
% to pathを使って頑張って描く
to path={(\tikztostart) -| ([xshift=1em]X.east)\tikztonodes |- (Z) -| ([xshift=-1em]Y.west) |- (\tikztotarget)}]
& \Coker b\arrow[r] & \Coker c
\end{tikzcd}
to path
通常tikzcdの\arrow
はまっすぐな矢印しか描けませんが,to path
キーを使うとかなり柔軟に線を引くことができます.to path
キーの値は,TikZによる描画の書式そのものが入ります.TikZのマニュアルやTeX WIkiも参考にしてください.
基本的な書式は<始点> -- <中間点1> -- <中間点1> -- …… -- <終点>
です.これで<始点>
から始まり<中間点1>
,<中間点2>
,……を通り<終点>
へとたどり着く矢印が引かれます.点と点の間を--
で引くとまっすぐな線が引かれますが,代わりに|-
や-|
を使うと縦と横との線のみを使って引こうとします.--
の代わりにto
と書くこともできます.これも--
と同様まっすぐな矢印を出力しますが,to [out=135,in=45]
のように始点と終点の場所を角度で指定することもできます.(ちょっと曲がった矢印が出ます.)
始点は\tikztostart
,終点は\tikztotarget
で参照できます.中間点は上の例のように適当に名前をつけて使うとよいでしょう.名前の後に.east
をつけるとその点の右側を表します..west
,.north
,.south
等など.coordinate
はラベルのサイズを0にするオプションで,長い矢印は実際には「X.eastからZの右」と「Zの左からY.west」と分割されているので,coordinate
がないとZの幅の分だけ空きができてしまいます.また,++<座標>
とすると前の点からの相対位置を表すことができます.例えばto path={(\tikztostart) -- ++(1cm,1cm)}
とすると,始点から右に1cm,上に1cm行った先の点まで矢印が引かれます.
矢印に対するラベルは,つけたい位置に\tikztonodes
と書きます.もちろん\arrow
へのオプションとしてラベルを指定しておく必要があります.またはnode
を直接指定することもできます.例えば上の例で,\tikztonodes
の代わりにnode[at end,right]{$d$}
と書いても同じ出力を得ることができます.
その他,放物線,サインカーブ,ベジェ曲線などなど…….
0 件のコメント:
コメントを投稿
コメントの追加にはサードパーティーCookieの許可が必要です