Шаровидные 3-клеточные и более высокие диаграммы в xy-pic

Шаровидные 3-клеточные и более высокие диаграммы в xy-pic

Существует ли удобный/стандартизированный способ форматирования шаровидных 3-ячеечных ячеек таким xy-picже образом, как мы можем сделать это с 2-ячеечными?

Для 2-клеток команда \rtwocell генерирует требуемые стрелки, а модификация, которая позволяет вводить \rncellнатуральные числа n, была бы невероятно полезна для написания статей по теории категорий и т. д.нЛабстраниц.

Я нашелстраницаописывал, как определить шаровидные 3-ячейки еще в 2004 году, но, 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, немного укоротив (2 пункта) кончик и хвост стрелки, согнув влево от точки, называемой «U», до точки, называемой «D».

Я ничего не знаю о шаровидных диаграммах, я просто написал пример того, как их использовать tikz-cd.

Редактировать:В особых случаях может оказаться удобным чистое решение TikZ.

Я добавил один с TikZ matrix. Если вы используете его без загрузки tikz-cd, вам придется загрузить \usetikzlibrary{matrix}.

Вы можете ссылаться на ячейки матрицы с помощью matrixname-rownumber-columnnumber.

\node[above=16pt of mymatr, inner sep=12pt] (UP) {};означает «разместить узел UPна 16 пунктов выше mymatr, поскольку узел содержит пустой текст, я задал ему высоту inner sep=12pt».

\draw[double distance=2pt, -{Implies}] (UP.south) -- (DOWN.north);означает «нарисовать стрелку с Impliesнаконечником стрелы и с расстоянием в 2 точки между двумя рядами стрелок, между южной точкой узла UPи северной точкой точки DOWN».

\draw ([xshift=-10pt]UP.south) edge[bend right=60, double distance=2pt, -{Implies}] ([xshift=-10pt]DOWN.north);означает «нарисовать Impliesстрелку, наклоненную вправо на 60 градусов, из точки, смещенной по горизонтали на -10 пунктов от , UP.southв точку, смещенную по горизонтали на -10 пунктов от 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}

введите описание изображения здесь

Связанный контент