
xy-pic
球状の 3 セルを2 セルと同じようにフォーマットする、適切で標準化された方法はありますか?
2セルの場合、コマンドは\rtwocell
必要な矢印を生成し、\rncell
自然数nを入力できるようにする変更は、カテゴリ理論の論文を書くのに素晴らしいものになるでしょう。nラボページ。
私は見つけたページ2004 年に球状 3 セルの定義方法を説明しましたが、xy-pic
それ以降構文が大幅に変更されたようです (少なくとも私は、そこにあるコードを読んで、自分のバージョンの で機能するものに翻訳するには未熟すぎますxy-pic
)。LaTeX に詳しい人は、これらのコードを最新の構文で機能するように改良できますかxy-pic
?
矢印の間に矢印の間に矢印の間に矢印の間に... という、より高次のセルに一般化できる戦略はどれも素晴らしいものですが、3 つのセルに対するソリューションも大いに歓迎します。また、tikz
構文に詳しくないため、ソリューションは私には多少理解しにくいものになることに注意してください。ただし、ソリューションが存在せずxy-pic
(そして、ソリューションを作成してくれる親切なサマリア人もいない)、tikz
手元にエレガントなソリューションがある場合は、新しい構文を学習して図を使用できますtikz
。
次のコード
\xymatrix@R5mm@C10mm{ & \ar@{=>}@/^.7pc/[dd]^\Theta \ar@{=>}@/_.7pc/[dd]_{\;\;\;\Theta'} \\ A \ar@/^2.0pc/[rr]^F \ar@/_2.1pc/[rr]_G & {\substack{\mathscr{M} \\ \rightsquigarrow}} & B \\ & }
以下の図を生成します
さらに一般化するのは比較的簡単ですが (時間がかかります)、これはかなりハックされており、大きな図では非常に時間がかかるため、よりエレガントなソリューションが依然として大いに歓迎されます。
答え1
とtikz-cd
難しくない。
これらは&
セルを区切るために使用されます (\\
行が複数ある場合は行を区切るために使用されます)。
\arrow[rr, bend left=40, "F", ""{name=U}]
「左に 40 度曲がった矢印を描き、ラベルを「F」とし、中心点を「U」とする」という意味です。
\arrow[Rightarrow, "\Theta", shorten <=2pt, shorten >=2pt, bend left=40, from=U, to=D]
は、「右矢印を描き、 とラベルを付け\Theta
、矢印の先端と尾を少し (2pt) 短くし、「U」と呼ばれる点から「D」と呼ばれる点まで左に曲げます。」という意味です。
球状図については何も知りませんが、使い方の例を書いただけですtikz-cd
。
編集:特殊なケースでは、純粋な TikZ ソリューションが便利な場合があります。
TikZ を使って 1 つ追加しましたmatrix
。 をロードせずに使用する場合はtikz-cd
、 をロードする必要があります\usetikzlibrary{matrix}
。
マトリックスセルは で参照できますmatrixname-rownumber-columnnumber
。
\node[above=16pt of mymatr, inner sep=12pt] (UP) {};
は「ノードをUP
の 16pt 上に配置しmymatr
、ノードに空のテキストがあるため、 の高さを指定しましたinner sep=12pt
。」という意味です。
\draw[double distance=2pt, -{Implies}] (UP.south) -- (DOWN.north);
「ノードの南点とポイントの北点Implies
の間に、矢印の先端と、矢印の 2 列間の距離が 2 ポイントの矢印を描く」という意味です。UP
DOWN
\draw ([xshift=-10pt]UP.south) edge[bend right=60, double distance=2pt, -{Implies}] ([xshift=-10pt]DOWN.north);
Implies
「から水平方向に -10pt シフトした点から からUP.south
水平方向に -10pt シフトした点まで、60 度右に曲がった矢印を描くDOWN.north
」という意味です。
\documentclass{article}
\usepackage{amsmath,amsfonts, amssymb}
\usepackage{tikz-cd}
\usetikzlibrary{positioning, arrows.meta}
\begin{document}
\[
\begin{tikzcd}
A
\arrow[rr, bend left=40, "F", ""{name=U}]
\arrow[rr, bend right=40, "G", swap, ""{name=D}]
&
M
&
B
\arrow[rr, bend left=40, "A", ""{name=A}]
\arrow[rr, bend right=40, "B", swap, ""{name=B}]
&
\Rrightarrow
&
\bullet
\arrow[Rightarrow, "\Theta", shorten <=2pt, shorten >=2pt, bend left=40, from=U, to=D]
\arrow[Rightarrow, "\Theta'", shorten <=2pt, shorten >=2pt, bend right=40, swap, from=U, to=D]
\arrow[Rightarrow, "\Phi", shorten <=2pt, shorten >=2pt, bend left=40, from=A, to=B]
\arrow[Rightarrow, "\Phi'", shorten <=2pt, shorten >=2pt, bend right=40, swap, from=A, to=B]
\end{tikzcd}
\]
\[
\begin{tikzpicture}
\matrix[matrix of math nodes,
nodes in empty cells]
(mymatr) {
\bullet &[20pt] \Rrightarrow &[10pt] \Rrightarrow &[20pt] \bullet\\
};
\node[above=16pt of mymatr, inner sep=12pt] (UP) {};
\node[below=16pt of mymatr, inner sep=12pt] (DOWN) {};
\draw[->, rounded corners=40pt] (mymatr-1-1) -- (UP.north) -- (mymatr-1-4);
\draw[->, rounded corners=40pt] (mymatr-1-1) -- (DOWN.south) -- (mymatr-1-4);
\draw[double distance=2pt, -{Implies}] (UP.south) -- (DOWN.north);
\draw ([xshift=10pt]UP.south) edge[bend left=60, double distance=2pt, -{Implies}] ([xshift=10pt]DOWN.north);
\draw ([xshift=-10pt]UP.south) edge[bend right=60, double distance=2pt, -{Implies}] ([xshift=-10pt]DOWN.north);
\end{tikzpicture}
\]
\end{document}