是否有一种好的/标准化的方法来格式化球状 3 细胞,就像xy-pic
我们可以使用 2 细胞一样?
对于 2 单元格,该命令\rtwocell
会生成所需的箭头,并且允许输入自然数 n 的修改\rncell
对于编写类别理论论文和实验室页。
我发现了一个页描述了如何在 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 的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}