Rótulos distorcidos no tikzcd
Eu estava desenhando um diagrama de transformação natural usando o tikzcd. No entanto, não sei por que a saída foi "distorcida":
\documentclass{article}
\usepackage{mathrsfs}
\usepackage{tikz-cd}
\begin{document}
\[\begin{tikzcd}
\mathscr{O}(X)^{op}
\arrow[r, bend left, "\Lambda A"]
\arrow[r, bend right, swap, "\Lambda A'"]
\arrow[r, phantom, bend left, shift right=0.2ex, ""{name=U}]
\arrow[r, phantom, bend right, shift left=0.2ex, swap, ""{name=D}]
&\textbf{Set}
\arrow[Rightarrow, from=U, to=D, "\Lambda f"]
\end{tikzcd}\]
\end{document}
Obtive a seguinte saída distorcida:
Agora, quando comparado a um código semelhante:
\documentclass{article}
\usepackage{mathrsfs}
\usepackage{tikz-cd}
\begin{document}
\[\begin{tikzcd}
\mathscr{A}
\arrow[r, bend left, "F"]
\arrow[r, bend right, swap, "G"]
\arrow[r, phantom, bend left, shift right=0.2ex, ""{name=U}]
\arrow[r, phantom, bend right, shift left=0.2ex, swap, ""{name=D}]
&\mathscr{B}
\arrow[Rightarrow, from=U, to=D, "\alpha"]
\end{tikzcd}\]
\end{document}
E dá uma bela saída:
Existe alguma maneira de consertar isso?
Respostas
Com ajuste manual das posições dos rótulos das setas:
\documentclass{standalone}%article
\usepackage{mathrsfs}
\usepackage{tikz-cd}
\begin{document}
%\[
\begin{tikzcd}
\mathscr{O}(X)^{op}
\ar[r, bend left, pos=0.47, "\Lambda A"]
\ar[r, bend right, pos=0.47, swap, "\Lambda A'"]
\ar[r, phantom, bend left, ""{name=U}]
\ar[r, phantom, bend right, pos=0.47, ""{name=D}]
& \textbf{Set}
\ar[Rightarrow, from=U, to=D, "\Lambda f"]
\end{tikzcd}
%\]
\end{document}
O problema é que a altura e largura de \mathscr{O}(X)^{op}é diferente da altura e largura de \textbf{Set}.
tikz-cddobra as setas de maneira desigual quando essas caixas não são do mesmo tamanho, o que afeta o posicionamento dos rótulos das setas e o posicionamento de Ue D.
Uma maneira de dar \textbf{Set}exatamente a mesma caixa que \mathscr{O}(X)^{op}é \rlapo \textbf{Set}com um invisível \mathscr{O}(X)^{op}usando \phantom.
Eu adicionei um espaço antes Setporque achei melhor assim. Você pode remover ou ajustar ao seu gosto. Além disso, em vez de usar as duas setas fantasmas, você pode namecolocar o espaço acima ou abaixo da seta, como fiz no código abaixo. Se você quiser que a seta central fique mais próxima das setas curvas, você pode usar shorten <=e shorten >=com valores negativos.
\[\begin{tikzcd}
\mathscr{O}(X)^{op}
\arrow[r, bend left, "\Lambda A", ""{name=U, below}]
\arrow[r, bend right, swap, "\Lambda A'", ""{name=D, above}]
&\rlap{\textbf{\ Set}}\phantom{\mathscr{O}(X)^{op}}
\arrow[Rightarrow, from=U, to=D, "\Lambda f"]
\end{tikzcd}\]