我在 tikz 手册(应该是 p329)上方看到一个关于交换图的示例,结果在前一页下方展示,具体代码是
\usetikzlibrary {matrix}
\begin{tikzpicture}[>=stealth,->,shorten >=2pt,looseness=.5,auto]
\matrix [matrix of math nodes,
column sep={2cm,between origins}, row sep={3cm,between origins}, nodes={circle, draw, minimum size=7.5mm}]
{
& |(A)| A &
\\ |(B)| B & |(E)| E & |(C)| C \\ & |(D)| D
\\
};
\begin{scope}[every node/.style={font=\small\itshape}]
\draw (A) to [bend left] node [midway] {g} (B);
\draw (B) to [bend left] node [midway] {f} (A);
\draw (D) --
node [midway] {c} (B); \draw (E) --
node [midway] {b} (B); \draw (E) --
node [near end] {a} (C);
\draw [-,line width=8pt,draw=graphicbackground]
(D) to [bend right, looseness=1] (A);
\draw (D) to [bend right, looseness=1] node [near start] {b} node [near end] {e} (A);
\end{scope}
\end{tikzpicture}
书上的结果是
注意红圈标注处交点有缝隙。(红色标注是我自己画的)
但我复制这段代码自己编译之后曲线会相交,没有缝隙。我想请问这样缝隙的效果怎么实现?
我之前用 knot宏包实现了,但又会出现曲线末端的箭头会消失的问题
(我猜测是这里因为箭头跟 node 的边界相交了,所以就会消失(产生缝隙),这个宏包应该是默认所有的相交线都会在交点处形成缝隙,但我只想让曲线相交时形成缝隙)。
请问还有没有其他实现方法?谢谢。
在此环境之前使用 \colorlet{graphicbackground}{white}
就可以了。
默认情况下,graphicbackground
颜色是没有被定义的,这个例子中,TikZ 将其定义为了棕黄色(图片的背景颜色)。
其实就是画两遍,先用背景色画一遍,再用黑色画一遍。
也可以用 preaction
实现,
% \draw [-,line width=8pt,draw=graphicbackground](D) to [bend right, looseness=1] (A);
% \draw (D) to [bend right, looseness=1] node [near start] {b} node [near end] {e} (A);
% 改为
\draw[preaction={draw=white,line width=8pt}] (D) to [bend right, looseness=1] node [near start] {b} node [near end] {e} (A);
这二者还是有细微差别的。
明白了,谢谢