我想构建如下图表
,
最好有tikz-cd
,但我不知道从哪里开始。请帮忙 :)
编辑:这是我目前所得到的。
\begin{tikzcd}
\mathbf{C} \arrow[bend left=35]{r}[name=F]{F} & \mathbf{D}\arrow[bend left=35]{l}[name=U]{U}
\arrow[to path=(F) -- (U)]{d}{\vdash}
\end{tikzcd}
我尝试了几种变化,但我不明白如何获得\vdash
(或\bot
,无论哪种)。
答案1
Qrrbrbirlbel 的回答中有一个小问题:应该\dashv
旋转。可以按如下方式进行:
\documentclass{standalone}
\usepackage{tikz-cd}
\usepackage{amsfonts}
\begin{document}
\begin{tikzcd}
\mathbb{C}
\arrow[r, "F"{name=F}, bend left=25] &
\mathbb{B}
\arrow[l, "U"{name=G}, bend left=25]
%--- Adjunction Symbol
\arrow[phantom, from=F, to=G, "\dashv" rotate=-90, no line]
\end{tikzcd}
\end{document}
给予
答案2
如果您想避免添加额外的行或列,而是想使用坐标/节点和它们之间的路径来放置节点,则可以使用以下样式:
from=<c1> to <c2>
其中<c1>
和<c2>
是坐标/节点(不带括号)。这转换为
to path
:(<c1>) -- (<c2>)\tikztonodes
。需要
宏\tikztonodes
,以便将节点(如您的\vdash
)放置在此路径上。这种
no line
风格实现了两个目的:首先,没有绘制线(
draw=none
),然后对于“标签”(tikz-cd
即“沿路径的节点”的-ish),该auto
选项被停用,当激活时,将节点放置在路径的一侧或两侧(left
/right
)。样式
description
做了类似的事情,因为它强制锚点center
(这会重置的操作auto
)并应用fill
了background color
。因为没有画线,所以不需要添加填充。
在我的回答中也可以找到类似的恶作剧
- 将 2cell 选项中的 xtwocell 箭头方向改为 xy(画一条线到不在单元格中的节点/坐标)
- 在 Tikz 中用包含符号替换箭头
\subseteq
(使用像箭头一样的符号)
代码
\documentclass[tikz]{standalone}
\usepackage{tikz-cd}
\tikzset{
no line/.style={draw=none,
commutative diagrams/every label/.append style={/tikz/auto=false}},
from/.style args={#1 to #2}{to path={(#1)--(#2)\tikztonodes}}}
\begin{document}
\begin{tikzcd}
\mathbf{C} \arrow[bend left=35]{r}[name=F]{F}
& \mathbf{D}\arrow[bend left=35]{l}[name=U]{U}
\arrow[from=F to U, no line]{}{\vdash}
\end{tikzcd}
\end{document}
输出
答案3
由于您没有在该示例中绘制垂直箭头,因此您可以改为在矩阵中添加一个额外的列以将其放置在中间。然后,您必须通过在第一个参数中添加一个额外的/\vdash
来修改箭头以向右/向左移动两列:r
l
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
\mathbf{C} \arrow[bend left=35]{rr}{F} % note {rr} instead of {r}
& \vdash % additional column for \vdash
& \mathbf{D}\arrow[bend left=35]{ll}{U} % note {ll} instead of {l}
\end{tikzcd}
\end{document}