
По какой-то причине, исправить которую, вероятно, будет слишком сложно, не сломав что-нибудь еще в моем документе, Tikzcd работает в моем документе только в режиме совместимости с «Альтернативным синтаксисом для стрелок», который, согласно руководству, «использовался до появления синтаксиса кавычек для меток».
Это означает, что такой код:
\arrow[r, Rightarrow, "\phi"]
В моем документе это не работает, мне пришлось бы написать так:
\arrow[Rightarrow]{r}{\phi}
Чтобы получить желаемый результат.
Как же тогда мне записать выражения, подобные [from=A,to=B]
тем, что встречаются в:
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
A \arrow[r, bend left=50, ""{name=U, below, draw=red}]
\arrow[r, bend right=50, ""{name=D, draw=red}]
& B
\arrow[Rightarrow, from=U, to=D]
\end{tikzcd}
\end{document}
А точнее, я попытался заставить работать следующее выражение:
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
\mathcal{C}
\ar[bend left=47, pos=0.5]{r}{F}
\ar[bend right=47, pos=0.5]{r}[swap]{G}
\arrow[phantom,bend left=40, shift right=0.2ex, name=U]{r}
\arrow[phantom,bend right=38.4, shift left=0.2ex, swap, name=D]{r}
& \mathcal{D}
\arrow[Rightarrow]{from=U,to=D}{N}
\end{tikzcd}
\end{document}
Но последняя стрелка, которая должна была идти от середины верхней стрелки вниз к середине нижней стрелки, выдает ошибку и отображается неправильно, как слегка наклоненная вверх и влево стрелка. То есть, результат, который я получаю, это:
Когда мне хочется чего-то вроде:
но, конечно, с указанием других имен.
решение1
Согласноtikz-cd
руководство, помимо использования имен узлов, которые вы можете назначить с помощью alias
параметра внутри соответствующей ячейки (см. второй пример ниже), вы также можете использовать синтаксис <row number>-<column number>
для обозначения начала и конца стрелки при использовании параметров from
и to
(см. первый пример ниже). Однако эти параметры следует поместить в необязательный аргумент. Вы также можете сместить стрелку с помощью xshift
или yshift
.
\documentclass[border=10pt, tikz]{standalone}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
\mathcal{C}
\arrow[bend left=47, pos=0.5]{r}{F}
\arrow[bend right=47, pos=0.5]{r}[swap]{G}
& \mathcal{D}
\arrow[Rightarrow, from=1-2, to=1-1, yshift=0.5pt]{}{N}
\end{tikzcd}
\end{document}
\documentclass[border=10pt, tikz]{standalone}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
|[alias=R]| \mathcal{C}
\arrow[bend left=47, pos=0.5]{r}{F}
\arrow[bend right=47, pos=0.5]{r}[swap]{G}
& |[alias=L]| \mathcal{D}
\arrow[Rightarrow, from=L, to=R, yshift=0.5pt]{}{N}
\end{tikzcd}
\end{document}
Оба фрагмента кода дают одинаковый результат:
Теперь не так просто добавить стрелку вниз, потому что две координаты, которые изображают начало и конец стрелки, не являются ячейками, которые можно выбрать с помощью вышеприведенной стратегии. Однако вы можете немного расширить матрицу, как в следующем примере:
\documentclass[border=10pt, tikz]{standalone}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
& {} & \\
\mathcal{O}(X)^{op}
\arrow[bend left=47, pos=0.5]{rr}{\Lambda A}
\arrow[bend right=47, pos=0.5]{rr}[swap]{\Lambda A'}
& & \textbf{Set} \\
& {} &
\arrow[Rightarrow, from=1-2, to=3-2,
shorten >=5pt, shorten <=5pt, xshift=-3.5pt]
{}{\Lambda f}
\end{tikzcd}
\end{document}
В качестве альтернативы можно использовать параметры start anchor
и end anchor
, но почему-то надпись на нижней изогнутой стрелке размещена неправильно и имеет такой маленький размер:
\documentclass[border=10pt, tikz]{standalone}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
|[alias=R]| \mathcal{O}(X)^{op}
\arrow[bend left=47, pos=0.5]{r}{\Lambda A}
\arrow[bend right=47, pos=0.5]{r}[swap]{\Lambda A'}
& |[alias=L]| \textbf{Set}
\arrow[Rightarrow, from=L, to=L,
start anchor={[xshift=-1cm]north}, end anchor={[xshift=-1cm]south}]
{}{\Lambda f}
\end{tikzcd}
\end{document}
Положение меток можно исправить, добавив \strut
к каждой ячейке символ , чтобы сделать их одинаково большими:
\documentclass[border=10pt, tikz]{standalone}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
|[alias=R]| \mathcal{O}(X)^{op}\strut
\arrow[bend left=47, pos=0.5]{r}{\Lambda A}
\arrow[bend right=47, pos=0.5]{r}[swap]{\Lambda A'}
& |[alias=L]| \textbf{Set}\strut
\arrow[Rightarrow, from=L, to=L,
start anchor={[xshift=-1cm]north}, end anchor={[xshift=-1cm]south}]
{}{\Lambda f}
\end{tikzcd}
\end{document}
решение2
Позвольте мне предложить вам другой маршрут, который позволит вам:
- работа с вашим документом, который не может справиться с последней
tikz-cd
версией - при использовании последней
tikz-cd
версии
Подход заключается в разделении требований в пространстве, т.е. ЭТО в одном месте, ТО в другом:
- работайте с вашим основным документом, который использует
incompatible documentclass
- работать с любым количеством документов, представляющих одну диаграмму каждый, в зависимости от
standalone
класса
Вот так:
стрелки.tex, который является вашим опубликованным кодом с небольшой изюминкой. Просто скомпилируйте его, мы вернемся к нему arrows.pdf
через минуту.
\documentclass[10pt,border=3mm]{standalone}
%\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
A \arrow[r, bend left=50, ""{name=U, below, draw=red}]
\arrow[r, bend right=50, ""{name=D, draw=red}]
& B
\arrow[Rightarrow, from=U, to=D]
\end{tikzcd}
\end{document}
основной.текс, который использует необычный класс документа, скажем так screenplay
: он имитирует различия, недостатки, несовместимости и т. д., которые, по-видимому, есть у вашего основного класса, когда дело доходит до взаимодействия с tikz-cd
.
Сценарий может даже работать с tikz-cd, я не проверял. Но давайте представим, что это не так. Как видите, он просто вообще не использует ни одного диалекта Tikz...
Соответствующие строки кода:
...
\usepackage{graphicx} % without tikz showing tikz-cd diagram
...
\includegraphics[width=.3\textwidth]{arrows}% i.e. arrows.pdf
...
\documentclass{screenplay}[2012/06/30] % just an alian class
\usepackage{graphicx} % without tikz showing tikz-cd diagram
% ~~~ some shortcuts ~~~~~~~~~~~~
\newcommand\di[2]{\begin{dialogue}{#1}#2\end{dialogue}}
\newcommand\dia[3]{\begin{dialogue}[#2]{#1}#3\end{dialogue}}
\newcommand\newch[1]{\MakeUppercase{#1}}
\newcommand\pr[0]{Proggi}
\newcommand\ld[0]{Lad}
% ~~~ some redefine ~~~~~~~~~~~
\renewcommand\emph{***}
% ~~~~~~~~~~~~~~~~~~~~~~~
\begin{document}
\title{An arrows drama}
\author{MS-SPO}
\maketitle
% ~~~ Characters ~~~~~~~~~~~~~~~~~~~~~~
\newch{Proggi}, a programmer, full of energy.
\newch{Lad}, a nice document creating language, with some bells and whistles.
% ~~~ Let the drama begin ~~~~~~~~~~~
\fadein
\intslug[Night]{A stubborn documentclass}
\pr{} spent already endless hours, while \ld{} keeps being stubborn.
\dia{\pr}{impatient}{Why can't you just do what I'm telling you to do! Why can't you?}
\dia{\ld}{amused}{You did read the manuals, did you?}
\dia{\pr}{about to burst}{Yours, yeah \dots other ones?}
\dia{\ld}{whispering}{Yes: about \emph{standalone} and \emph{graphicx} \dots There you go \dots}
\begin{center}
\includegraphics[width=.3\textwidth]{arrows} % <<<
\end{center}
\fadeout
\end{document}