Как заставить аргумент from=, to= работать в Tikzcd в режиме совместимости?

Как заставить аргумент from=, to= работать в Tikzcd в режиме совместимости?

По какой-то причине, исправить которую, вероятно, будет слишком сложно, не сломав что-нибудь еще в моем документе, 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}

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