我正在尝试绘制一个数学概念,但由于某种原因,符号倾斜,标签不居中。我尝试调整 pos 等参数,但总体来说一定有更好的方法:
\[
\begin{tikzcd}
\Gph\arrow[r,bend left,"F_C",""{name=A, below}] & \Cat\arrow[l,bend left,"U_G",""{name=B,above}] \arrow[from=A, to=B, symbol=\dashv] \arrow[r,bend left,"F_P",""{name=C, below}] & \Pos \arrow[l,bend left,"U_C",""{name=D,above}] \arrow[r,bend left,"U_S",""{name=E, below}] \arrow[from=C, to=D, symbol=\dashv] & \Set \arrow[l,bend left,"F_P",""{name=F,above}] \arrow[from=F, to=E, symbol=\dashv]
\end{tikzcd}
\]
请告诉我一种更系统的制作这些图表的方法;谢谢!
答案1
我刚刚对您的条目进行了如下修改。
\documentclass{article}
\usepackage{tikz-cd}
\usetikzlibrary{arrows}
\def\ac{\rotatebox[origin=c]{90}{$\dashv$}} %rotate dash anti-cw
\def\cw{\rotatebox[origin=c]{-90}{$\dashv$}} %rotate dash cw
%\tikzset{adj/.style={pos=0.545,outer sep=3pt}} %adjust label position along path
\begin{document}
\begin{tikzcd}[column sep=small]
Gph \arrow[bend left,below]{rr}{F_C}
& \cw &
\arrow[bend left,above]{ll}{U_G} Cat \arrow[bend left,below]{rr}{F_P}
%\arrow[bend left,above, adj]{ll}{U_G} Cat \arrow[bend left,below]{rr}{F_P}
& \dashv &
\arrow[bend left,above]{ll}{U_C} Pos \arrow[bend left,below]{rr}{U_S}
& \ac &
Set \arrow[bend left,above]{ll}{F_P}
\end{tikzcd}
\end{document}
我还添加了代码来旋转 \dashv 符号。显示正常的 \dashv 以及顺时针和逆时针旋转。
添加了一条命令(注释掉),用于调整标签沿箭头的位置及其与线的距离。您可以尝试各种值,直到得到您喜欢的结果。下面,第一张图片显示了使用“column sep = tiny”导致的错位标签。
后续图片使用注释掉的命令调整标签位置,使其与另一个标签垂直对齐,并显示可以将标签从线推远 3pt。
答案2
与原始代码不同的方法。
\documentclass{article}
\usepackage{tikz-cd}
\newcommand{\pdashv}{\rotatebox[origin=c]{-90}{$\dashv$}}
\newcommand{\vdashv}{\rotatebox[origin=c]{0}{$\dashv$}}
\newcommand{\sdashv}{\rotatebox[origin=c]{90}{$\dashv$}}
\begin{document}
\begin{tikzcd}
Gph \arrow[rr, "F_C", bend left] & \pdashv & Cat
\arrow[ll, "U_G", bend left]
\arrow[rr, "F_P", bend left] & \vdashv & Pos \arrow[ll, "U_C", bend left]
\arrow[rr, "U_S", bend left] & \sdashv & Set \arrow[ll, "F_P", bend left]
\end{tikzcd}
\end{document}