tikz 手册上的一个绘图示例问题

发布于 2022-08-04 09:44:18

我在 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}

书上的结果是IMG_0646.jpg
注意红圈标注处交点有缝隙。(红色标注是我自己画的)

但我复制这段代码自己编译之后曲线会相交,没有缝隙。我想请问这样缝隙的效果怎么实现?
我之前用 knot宏包实现了,但又会出现曲线末端的箭头会消失的问题
(我猜测是这里因为箭头跟 node 的边界相交了,所以就会消失(产生缝隙),这个宏包应该是默认所有的相交线都会在交点处形成缝隙,但我只想让曲线相交时形成缝隙)。
请问还有没有其他实现方法?谢谢。

查看更多

关注者
0
被浏览
171
1 个回答
雾月
雾月 2022-08-04

在此环境之前使用 \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);

这二者还是有细微差别的。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览