
是否有一種很好/標準化的方法來格式化球狀 3 單元格,就像xy-pic
我們處理 2 單元格一樣?
對於 2 個單元格,該命令\rtwocell
產生所需的箭頭,並且允許輸入自然數 n 的修改\rncell
對於撰寫範疇論論文和實驗室頁。
我找到了一個頁早在 2004 年就描述瞭如何定義球狀 3-cells,但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 的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
箭頭尖端,兩行箭頭之間的距離為 2pt,位於節點的南點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}