xy-pic 中的球状 3 细胞及更高级别的图表

xy-pic 中的球状 3 细胞及更高级别的图表

是否有一种好的/标准化的方法来格式化球状 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 ”。UPDOWN

\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}

在此处输入图片描述

相关内容