我正在使用 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}
它给出了一个漂亮的输出:
有没有什么办法可以解决这个问题?
答案1
问题是 的高度和宽度\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
因为我认为这样看起来更好。您可以根据自己的喜好删除或调整。此外,除了使用两个幻影箭头外,您还可以使用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}\]
答案2
手动调整箭头标签位置:
\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}