答案1
每当单元格的尺寸不同时,弯曲的箭头可能不是水平的,因此,边缘标签可能会出现错位。有很多方法可以解决这个问题,下面的代码描述了其中两种。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd}
\begin{document}
\[
\begin{tikzcd}
\mathcal{C} \arrow[r,bend left,"F_T"] &
\mathcal{C}_T \arrow[l,bend left,"G_T"]
\end{tikzcd}
\quad\text{vs.}\quad
\begin{tikzcd}% make the box sizes equal
{}_{\phantom{T}}\mathcal{C} \arrow[r,bend left,"F_T"] &
\mathcal{C}_T \arrow[l,bend left,"G_T"]
\end{tikzcd}
\quad\text{vs.}\quad
\begin{tikzcd}% shift the edge label positions
\mathcal{C} \arrow[r,bend left,"F_T" {pos=0.6}] &
\mathcal{C}_T \arrow[l,bend left,"G_T" {pos=0.4}]
\end{tikzcd}
\]
\end{document}
左图为原始图。中间图使用幻影使单元格大小相等。右图边缘标签发生偏移。
如果你想一劳永逸地解决这个问题,你可以引入自己的风格来解决这个问题。然后你需要做的就是使用hbend left
而不是bend left
。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd}
\usetikzlibrary{calc}
\tikzset{hbend left/.style={
to path={let \p1=($(\tikztotarget)-(\tikztostart)$),
\p2=($(\tikztostart.north)-(\tikztostart.south)$),
\p3=($(\tikztotarget.north)-(\tikztotarget.south)$),
\n1={max(\y2,\y3)/2} in
\ifdim\x1>0pt
([yshift=\n1]\tikztostart.east) to[bend left] ([yshift=\n1]\tikztotarget.west)
\else
([yshift=-0.7*\n1]\tikztostart.west) to[bend left] ([yshift=-0.7*\n1]\tikztotarget.east)
\fi
}}}
\begin{document}
\[
\begin{tikzcd}
\mathcal{C} \arrow[r,hbend left,"F_T"] &
\mathcal{C}_T \arrow[l,hbend left,"G_T"]
\end{tikzcd}
\]
\end{document}