围绕 tikzcd 图的任意容器

围绕 tikzcd 图的任意容器

我希望绘制这样的图片,围绕几个点绘制任意形状,并在它们之间画箭头。我在 tikzpicture 中使用圆形命令,但结果却大不相同。有人可以指导我吗? 在此处输入图片描述

答案1

这是...的工作tikzmark

在此处输入图片描述

基本思路:tikzcd像往常一样制作你的。但是将一个放在tikzmark中间。我将一个放在从到的不可见的( phantom)箭头上,并将其命名为。afmiddleL

tikzpicture然后留出一些空间,像往常一样制作。但要tikzmark在中间放置一个。我把一个放在了,(0,0)并称之为middleR

tikzpicture然后使用开始新的\begin{tikzpicture}[remember picture, overlay]。绘制大而蓬松的云节点(使用shapes.symbols)并使用语法(pic cs:middleL)和将它们放置在坐标上(pic cs:middleR)(这是如何引用前一个tikzmarks )。然后将它们视为普通节点 -label它们和\draw它们之间的箭头bend left

注意:使用 tikzmark 时必须编译两次。

以下是代码:

\documentclass{article}

\usepackage{tikz-cd}
\usetikzlibrary{tikzmark,shapes.geometric,shapes.symbols}
\tikzset{elnode/.style={draw, ellipse, dotted, minimum height=1cm, label distance=-2mm},
    cloudnode/.style={draw, dashed, black!80, inner sep=1.75cm, cloud, cloud puffs=20, cloud puff arc=120}}

\begin{document}

\begin{tikzcd}[arrows={-latex, outer sep=-1.5pt},row sep=1cm, column sep=2cm]
 & b\arrow[dd,bend left=20,"f"{name=F}]\\
a\arrow[ur,bend left,"g_1"]\arrow[ur,"g_2"]\arrow[ur,bend right,"g_3"]
    \arrow[dr,bend left=20,"h_1"']\arrow[dr,bend right=20,"h_2"'] 
    \arrow[to=F,phantom,"{}\tikzmark{middleL}"] \\
 & c
\end{tikzcd}\hspace{3.5cm}
\begin{tikzpicture}[baseline,font=\small]
\node[elnode,label={above:$C(a,b)$}] at(0,1){$g_1\quad g_2\quad g_3$};
\node[elnode,label={below:$C(a,c)$}] at (0,-1){$h_1\quad h_2$};
\node at (0,0){\tikzmark{middleR}{}};
\end{tikzpicture}

\begin{tikzpicture}[remember picture, overlay]
\node[cloudnode, label={above:$C$}](lft) at (pic cs:middleL){};
\node[cloudnode, label={above:\textbf{Set}}](rgt) at (pic cs:middleR){};
\draw[-latex](lft)to[bend left]node[above]{$C(a,-)$}(rgt);
\end{tikzpicture}

\end{document}

相关内容