Wie lässt sich ein „from=, to=“-Argument in Tikzcd im Kompatibilitätsmodus zum Laufen bringen?

Wie lässt sich ein „from=, to=“-Argument in Tikzcd im Kompatibilitätsmodus zum Laufen bringen?

Aus irgendeinem Grund, dessen Behebung wahrscheinlich zu viel Arbeit bedeuten wird, ohne etwas anderes in meinem Dokument zu beschädigen, funktioniert Tikzcd in meinem Dokument nur im Kompatibilitätsmodus mit der „Alternativen Syntax für Pfeile“, die laut Handbuch „vor dem Erscheinen der Anführungszeichen-Syntax für Beschriftungen verwendet wurde“.

Das bedeutet, dass Code wie:

\arrow[r, Rightarrow, "\phi"]

Funktioniert in meinem Dokument nicht, ich müsste es so schreiben:

 \arrow[Rightarrow]{r}{\phi}

Um das gewünschte Ergebnis zu erzielen.

Wie schreibe ich dann Ausdrücke wie diese, [from=A,to=B] die in folgendem vorkommen:

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

Genauer gesagt habe ich versucht, den folgenden Ausdruck zum Funktionieren zu bringen:

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

Aber der letzte Pfeil, der von der Mitte des oberen Pfeils nach unten zur Mitte des unteren Pfeils zeigen sollte, gibt einen Fehler aus und wird fälschlicherweise als leicht nach oben links zeigender Pfeil angezeigt. Das heißt, das Ergebnis, das ich erhalte, ist: Bildbeschreibung hier eingeben

Wenn ich etwas möchte wie:

Bildbeschreibung hier eingeben

aber natürlich mit der Anzeige anderer Namen.

Antwort1

Entsprechend dertikz-cdHandbuch, außer den Knotennamen, die Sie über die aliasOption in der jeweiligen Zelle zuweisen können (siehe zweites Beispiel unten), können Sie auch die Syntax verwenden, <row number>-<column number>um den Anfang und das Ende eines Pfeils bei Verwendung der Optionen fromund zu kennzeichnen to(siehe erstes Beispiel unten). Diese Optionen sollten jedoch in das optionale Argument eingefügt werden. Sie können den Pfeil zusätzlich mit xshiftoder verschieben 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}

Beide Codeausschnitte führen zur gleichen Ausgabe:

Bildbeschreibung hier eingeben


Nun ist es nicht ganz so einfach, einen nach unten gerichteten Pfeil hinzuzufügen, da die beiden Koordinaten, die den Anfang und das Ende des Pfeils darstellen, keine Zellen sind, die mit der obigen Strategie ausgewählt werden können. Sie könnten die Matrix jedoch ein wenig erweitern, wie im folgenden Beispiel:

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

Bildbeschreibung hier eingeben


start anchorAlternativ könnte man auch die Optionen und verwenden end anchor, allerdings ist die Beschriftung des unteren gebogenen Pfeils in so kleiner Größe irgendwie falsch platziert:

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

Bildbeschreibung hier eingeben

Die Position der Beschriftungen kann festgelegt werden, indem man \strutzu jeder Zelle ein hinzufügt, um sie gleich groß zu machen:

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

Bildbeschreibung hier eingeben

Antwort2

Ich möchte Ihnen einen anderen Weg vorschlagen, der Ihnen Folgendes ermöglicht:

  • tikz-cdArbeiten Sie mit Ihrem Dokument, das die neueste Version nicht verarbeiten kann
  • bei Verwendung der neuesten tikz-cdVersion

Der Ansatz besteht darin, die Anforderungen räumlich aufzuteilen, also DIES an einer Stelle, DAS an einer anderen:

  • arbeiten Sie mit Ihrem Hauptdokument, das dieincompatible documentclass
  • Arbeiten Sie mit so vielen Dokumenten, die jeweils ein Diagramm darstellen, basierend auf der standaloneKlasse

Auf geht's:

Pfeile.tex, das ist Ihr geposteter Code mit einer kleinen Abwandlung. Kompilieren Sie ihn einfach, wir kommen arrows.pdfgleich darauf zurück.

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

Pfeile


main.tex, das beispielsweise eine ungewöhnliche Dokumentklasse verwendet: screenplayDies ahmt die Unterschiede, Mängel, Inkompatibilitäten usw. nach, die Ihre Hauptklasse in Bezug auf die Zusammenarbeit mit zu haben scheint tikz-cd.

Screenplay funktioniert möglicherweise sogar mit Tikz-CD, ich habe es nicht überprüft. Aber tun wir mal so, als ob es nicht so wäre. Wie Sie sehen, wird einfach überhaupt kein Tikz-Dialekt verwendet ...

Die relevanten Codezeilen sind:

...
\usepackage{graphicx}       % without tikz showing tikz-cd diagram
...
    \includegraphics[width=.3\textwidth]{arrows}% i.e. arrows.pdf
...

Theater

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

verwandte Informationen