考虑一下这个MWE:
\documentclass[12pt]{article}
\usepackage{tkz-graph, tikz-cd}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.markings}
\begin{document}
Blah ... blah.
\begin{tikzpicture}[scale=2,auto]
\tikzset{EdgeStyle/.style={postaction=decorate},
MyLabel/.style={
auto=right,
fill=none,
outer sep=0.2ex}}
\node [anchor=east] at (-.1,3) {$XYZ$};
\node (n1) at (0,1) {$Ay$};
\node (n2) at (1,3) {$Bx$};
\node (n3) at (2,2) {$Cy$};
\node (n4) at (4,4) {$Dx$};
\draw [line width = 1 pt, |->,bend left = 20] (n1) edge node {$V$} (n2);
\draw [line width = 1 pt, ->] (n2) edge node[swap] {$W$} (n3);
\begin{scope}[commutative diagrams/.cd, every arrow, every label]
\draw [line width = 1 pt, |->,bend left = 60] (n2) edge node[swap] (aux) {$Z$} (n4);
\draw [line width = 1 pt, |->,bend right = 60] (n3) edge node[swap] (aux) {$Y$} (aux);
\end{scope}
\draw [line width = 1 pt, double equal sign distance] (n1) -- (n3);
\draw [line width = 1 pt, white,-,line width=8pt,->, bend right=10] (n2) edge (n4);
\draw [line width = 1 pt, ->, bend right=10] (n2) edge (n4);
\Edge[style={bend right = 60},label={$f$},labelstyle={MyLabel}](n1)(n4)
\Edge[style={bend left = 60},label={$g$},labelstyle={MyLabel,swap}](n1)(n2)
\end{tikzpicture}
\end{document}
在这个无意义的最小例子中,不同的箭头和边很容易混合在一起。
但是有些标签的尺寸比其他标签大。那些在范围括号内的标签比那些不在范围括号内的箭头小。这个问题可以解决吗?标签的尺寸可以与文档其他地方使用的 12 号字体相对应吗?
例如,是否可以像上例一样,不依赖范围命令就在此处创建一个从节点到标签的箭头?如果非线性图表不能简化为几个范围块,而这些范围块之间不包含这种从节点到标签的箭头,是否可以将标签指定为节点,以便可以通过箭头将多个节点链接到该节点?如果可能的话,这自然会删除范围命令,并解决大小问题。
如何绘制右循环或左循环(我知道这可以在 tikz-cd 中轻松完成,比如说
f(x)
\arrow[mapsto,loop left]{r}{g}
是一个标记为 g 的 mapsto 循环,但是这里的 tikzpicture 中的参数是什么)与这些箭头兼容,即标签的大小与标签或 tikzpicture 箭头相同?
如何手动指定箭头的大小和线条的粗细。也许这就是问题的答案?我使用了线宽 = x pt,但我可以让箭头和箭头末端变大,而不让线条本身变粗吗?如果我删除线宽 = x pt,我会得到非常小的箭头……
也许边缘命令可以做成箭头?做成箭头(带装饰)?
有人可以给我提供完整的箭头列表,例如 ->、->>、|->、双等号距离,它们与 tikz-cd 中可用的箭头相对应?
更新:
这是我如何使箭头变得更大同时保留 mapto (|->) 箭头中的尾线:
\documentclass[112pt]{article}
\usepackage{tikz, tkz-graph, tikz-cd}
\usetikzlibrary{arrows,calc}
\pgfarrowsdeclare{btip}{usertip}{\setlength{\arrowsize}{0.3pt}
\addtolength{\arrowsize}{.5\pgflinewidth}
\pgfarrowsrightextend{0}
\pgfarrowsleftextend{-5\arrowsize}}
{\setlength{\arrowsize}{0.4pt}
\addtolength{\arrowsize}{.5\pgflinewidth}
\pgfpathmoveto{\pgfpoint{-5\arrowsize}{4\arrowsize}}
\pgfpathlineto{\pgfpointorigin}
\pgfpathlineto{\pgfpoint{-5\arrowsize}{-4\arrowsize}}
\pgfusepathqstroke}
\begin{document}
\begin{tikzpicture}[scale=2,auto]
\tikzset{EdgeStyle/.style={postaction=decorate},
MyLabel/.style={
auto=right,
fill=none,
outer sep=0.2ex}}
\node [anchor=east] at (-.1,3) {$XYZ$};
\node (n1) at (0,1) {$Ay$};
\node (n2) at (1,3) {$Bx$};
\node (n3) at (2,2) {$Cy$};
\node (n4) at (4,4) {$Dx$};
\draw [-btip, line width = 1 pt, bend left = 20] (n1) edge node {$V$} (n2);
\draw [-btip, line width = 1 pt] (n2) edge node[swap] {$W$} (n3);
\begin{scope}[commutative diagrams/.cd, every arrow, every label]
\draw [-btip, line width = 1 pt, bend left = 60] (n2) edge node[swap] (aux) {$Z$} (n4);
\draw [-btip, line width = 1 pt, bend right = 60] (n3) edge node[swap] (aux) {$Y$} (aux);
\end{scope}
\draw [line width = 1 pt, double equal sign distance] (n1) -- (n3);
\draw [white,-,line width=8pt,->, bend right=10] (n2) edge (n4);
\draw [-btip, line width = 1 pt, bend right=10] (n2) edge (n4);
\draw [|->, line width = 1 pt, bend right=10] (n2) edge (n4);
\draw [-btip, line width = 1 pt, bend right=60] (n1) edge (n4);
\draw [-btip, line width = 1 pt, bend left=60] (n1) edge (n2);
\end{tikzpicture}
\end{document}
但我无法让它与 |-> 这样的形式一起工作。似乎将 |-> 参数与 -btip 一起插入会导致 |-> 箭头覆盖 -btip,或 -btip 覆盖 |->。到目前为止,我只能创建两个箭头,一个 -btip 和一个 |-> 遵循相同的路径,以便尾部和箭头头都显示出来,但这是糟糕的风格,复杂的图表会使代码过于复杂。这是自定义这些箭头的唯一技巧吗?
谢谢!