tikzcdの歪んだラベル

Oct 09 2020

tikzcdを使って自然変換の図を描いていました。ただし、出力が「歪んだ」理由はわかりません。

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

次の歪んだ出力が得られました。

同様のコードと比較すると、次のようになります。

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

そしてそれは美しい出力を与えます:

これを修正する方法はありますか?

回答

2 Zarko Oct 09 2020 at 11:52

矢印ラベルの位置を手動で微調整すると:

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

2 SandyG Dec 14 2020 at 04:26

問題は、の高さと幅がの高さと幅\mathscr{O}(X)^{op}と異なることです\textbf{Set}。

tikz-cdこれらのボックスは、矢印ラベルの位置決めとの配置に影響する同じサイズで、ない場合に不均等に矢印を曲げるUとしますD。

与えるための一つの方法\textbf{Set}として、まったく同じボックスは\mathscr{O}(X)^{op}にある目に見えないと使用します。\rlap\textbf{Set}\mathscr{O}(X)^{op}\phantom

前にスペースを追加したのは、Setその方が見栄えが良いと思ったからです。削除したり、好みに合わせて調整したりできます。また、2つのファントム矢印を使用する代わりnameに、以下のコードで行ったように、矢印の上または下にスペースを入れることができます。あなたがしたい場合は、中央の矢印が近いあなたが使用できる曲線の矢印にするようにshorten <=してshorten >=、負の値を持ちます。

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