我正在寻找制作与此类似的线条的图表:标记加权有向图中的边
但是我试图用一个数学公式,即标签,而不是在点节点上方,取代粗点节点。换句话说,这些线实际上并不连接,而是像交换图中的线一样。这种方法允许精确指定节点的位置,与 tikz-cd 略有不同。
如何?
如何在 tikz-cd 中执行此操作也很有帮助。
在这个框架中,如何制作节点来标记箭头并通过重叠箭头来切割箭头?
[... 问题在回答后被整理好了,箭头和标签的大小问题放在了自己的问题中... 我自己的 MWE 示例移到了那个问题上进行这些更正,改变图表和有向图中箭头、标签、循环的大小,因为答案有几个 MWE 可以回答原始问题。
答案1
使用强大的tikz-cd
包中您可以轻松创建带有弯曲箭头的交换图;一个小例子(包文档包含其他例子);注意swap
更改标签位置的选项:
\documentclass{article}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}[row sep=3cm,column sep=2cm,shorten >= 4pt,shorten <=4pt]
F(x)
\arrow[bend left=40]{r}{F(f)}[name=UF,below]{}
\arrow[bend right=40]{r}[swap]{F(g)}[name=DF]{}
\arrow[bend left=30]{d}{A(x)}[name=D1,below]{}
\arrow[bend right=30]{d}[swap]{B(x)}[name=D2]{}
& F(y)
\arrow[bend left=30]{d}{A(y)}[name=D3,below]{}
\arrow[bend right=30]{d}[swap]{B(y)}[name=D4]{} \\
G(x)
\arrow[bend left=40]{r}{G(f)}[name=UG,below]{}
\arrow[bend right=40]{r}[swap]{G(g)}[name=DG]{}
& G(y) \\
\arrow[Rightarrow,to path=(UF) -- (DF)]{}
\arrow[Rightarrow,to path=(UG) -- (DG)]{}
\arrow[Rightarrow,shorten <=10pt,to path=(D1|-D2) -- (D2)]{}
\arrow[Rightarrow,shorten <=10pt,to path=(D3|-D4) -- (D4)]{}
\end{tikzcd}
\end{document}
附录:问题编辑后:
您仍然可以将“纯”TikZ
与 结合使用tikz-cd
;这使您能够实现手动定位(如所需),并且与 中的箭头和标签样式保持一致tikz-cd
。
对于交叉边缘,tikz-cd
提供crossing over
样式\arrow
(参见下面的第一个例子),并TikZ
提供实现相同效果的机制(参见下面的第二个例子):
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}[row sep=scriptsize, column sep=scriptsize]
& f^* E_V \arrow{dl}\arrow{rr}\arrow{dd} & & E_V \arrow{dl}\arrow{dd} \\
f^* E \arrow[crossing over]{rr}\arrow{dd} & & E \\
& U \arrow{dl}\arrow{rr} & & V \arrow{dl} \\
M \arrow{rr} & & N\arrow[crossing over, leftarrow]{uu}\\
\end{tikzcd}
\begin{tikzpicture}[commutative diagrams/every diagram]
\node (P0) at (90:2.8cm)
{$X\otimes (Y\otimes (Z\otimes T))$};
\node (P1) at (90+72:2.5cm)
{$X\otimes ((Y\otimes Z)\otimes T))$} ;
\node (P2) at (90+2*72:2.5cm)
{\makebox[5ex][r]{$(X\otimes (Y\otimes Z))\otimes T$}};
\node (P3) at (90+3*72:2.5cm)
{\makebox[5ex][l]{$((X\otimes Y)\otimes Z)\otimes T$}};
\node (P4) at (90+4*72:2.5cm)
{$(X\otimes Y)\otimes (Z\otimes T)$};
\begin{scope}[commutative diagrams/.cd, every arrow, every label]
\draw (P0) to[bend right] node[swap] {$1\otimes\phi$} (P1);
\draw (P1) to[bend right] node[swap] {$\phi$} ([xshift=-15pt]P2.north west);
\draw ([xshift=-10pt]P2.south west) to[bend right] node[swap] {$\phi\otimes 1$} ([xshift=15pt]P3.south east);
\draw ([xshift=25pt]P3.north east) to[bend right] node[swap] {$\phi$} (P4);
\draw (P4) to[bend right] node[swap] {$\phi$} (P0);
\draw (P0) to[bend left=60] ([xshift=-20pt]P2.north);
\end{scope}
\draw[white,-,line width=8pt] (P1) to[bend left] ([xshift=25pt]P3.north);
\begin{scope}[commutative diagrams/.cd, every arrow, every label]
\draw (P1) to[bend left] ([xshift=25pt]P3.north);
\end{scope}
\end{tikzpicture}
\end{document}
对于另一个要求(从一个节点到一个标签的箭头,该标签位于到另一个节点之间的箭头上),一个小例子(再次swap
用于改变标签的位置):
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzpicture}[commutative diagrams/every diagram]
\node (a) at (0,0) {A};
\node (b) at (3,0) {$B$} ;
\node (c) at (0,-3) {$C$};
\begin{scope}[commutative diagrams/.cd, every arrow, every label]
\draw (a) to[bend right] node[swap] (aux) {$f$} (b);
\draw (c) to[bend right] node[swap] (aux) {$g$} (aux);
\end{scope}
\end{tikzpicture}
\end{document}
答案2
我建议使用该包加斯特克斯(标准分布的一部分)。参见 http://www.lsv.ens-cachan.fr/~gastin/gastex/更多细节。
特别看看这两个例子,以测试是否加斯特克斯可以满足您的需要。