
Существует ли удобный/стандартизированный способ форматирования шаровидных 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}