¿Cómo hacer que un argumento from=, to= funcione en Tikzcd en modo de compatibilidad?

¿Cómo hacer que un argumento from=, to= funcione en Tikzcd en modo de compatibilidad?

Por alguna razón, que probablemente será demasiado trabajo para arreglar sin romper algo más en mi documento, Tikzcd solo funciona en mi documento en modo de compatibilidad con la "Sintaxis alternativa para flechas" que según el manual se "usaba antes de la aparición de la sintaxis de las comillas para las etiquetas".

Eso significa que el código como:

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

No funciona en mi documento, tendría que escribir esto como:

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

Para obtener el resultado deseado.

Entonces, ¿cómo escribo expresiones como [from=A,to=B] las que ocurren en:

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

Más específicamente, intenté hacer funcionar la siguiente expresión:

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

Pero la última flecha que se suponía que iba desde el centro de la flecha superior hacia abajo hasta el centro de la flecha inferior da un error y se muestra erróneamente como una flecha que apunta ligeramente hacia arriba hacia la izquierda. Es decir, el resultado que obtengo es: ingrese la descripción de la imagen aquí

Cuando quisiera algo como:

ingrese la descripción de la imagen aquí

pero, por supuesto, se muestran otros nombres.

Respuesta1

De acuerdo con latikz-cdmanual, además de usar nombres de nodos que puede asignar mediante la aliasopción dentro de la celda correspondiente (consulte el segundo ejemplo a continuación), también puede usar la sintaxis <row number>-<column number>para indicar el inicio y el final de una flecha cuando usa las opciones fromy to(consulte el primer ejemplo a continuación) . Sin embargo, estas opciones deben incluirse dentro del argumento opcional. También puede desplazar la flecha usando xshifto 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}

Ambos fragmentos de código dan como resultado el mismo resultado:

ingrese la descripción de la imagen aquí


Ahora bien, no es demasiado sencillo agregar una flecha hacia abajo, porque las dos coordenadas que representan el inicio y el final de la flecha no son celdas que se puedan seleccionar mediante la estrategia anterior. Sin embargo, podrías ampliar un poco la matriz, como en el siguiente ejemplo:

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

ingrese la descripción de la imagen aquí


Alternativamente, podrías hacer uso de las opciones start anchory end anchor, pero de alguna manera la etiqueta de la flecha doblada inferior está colocada incorrectamente en un tamaño tan pequeño:

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

ingrese la descripción de la imagen aquí

La posición de las etiquetas se puede fijar agregando \struta cada celda para hacerlas igualmente grandes:

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

ingrese la descripción de la imagen aquí

Respuesta2

Déjame sugerirte una ruta diferente que te permite:

  • trabajar con su documento, que no puede manejar la última tikz-cdversión
  • mientras usa la última tikz-cdversión

El enfoque consiste en separar los requisitos en el espacio, es decir, ESTO en un lugar, AQUELLO en otro diferente:

  • trabajar con su documento principal, que utiliza elincompatible documentclass
  • trabajar con tantos documentos, representando un diagrama cada uno, según la standaloneclase

Aquí vamos:

flechas.tex, que es el código publicado con un pequeño giro. Simplemente compílelo, volveremos a ello arrows.pdfen un minuto.

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

flechas


principal.tex, que utiliza una clase de documento inusual, digamos screenplay: esto imita diferencias, deficiencias, incompatibilidades, etc. que su clase principal parece tener cuando se trata de cooperación con tikz-cd.

El guión puede incluso funcionar con tikz-cd, no lo comprobé. pero pretendamos que no es así. como puede ver, simplemente no utiliza ningún dialecto Tikz en absoluto...

Las líneas de código relevantes son:

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

drama

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

información relacionada