我正在尝试绘制有向图和无向图的示例,并且我希望无向图中的循环没有箭头。
我知道我可以使用\tikzset{every loop/.style={}}
,但我更有可能使用带箭头的循环而不是不带箭头的循环,并且必须更改我的所有其他图表以便它们具有->
循环的参数会很麻烦,并且可能会导致与其他文档的许多依赖问题。
以下是我想做的事情的代码:
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.0cm,semithick,auto]
\foreach \i/\t in {0/directed,6/undirected}{
\foreach \x/\y/\v in {0/2/a,2/2/b,0/0/c,2/0/d}{
\pgfmathtruncatemacro\xx{\x+\i};
\node [draw,circle,minimum size=4mm] (\i-\v) at (\xx,\y) {};
\node at (\i-\v) {\(\v\)};
}
\pgfmathtruncatemacro\xt{\i+1};
\node at (\xt,-0.6) {\t};
}
\path (0-b) edge[loop right] (0-b);
\path (6-b) edge[loop right] (6-b); % this is the loop i want to change
\foreach \src/\tgt in {a/c,d/b,d/a}{
\path (0-\src) edge (0-\tgt);
\path [shorten >= 0pt,-](6-\src) edge (6-\tgt);
}
\path (0-c) edge[bend left=10] (0-d);
\path (0-d) edge[bend left=10] (0-c);
\path [shorten >= 0pt,-](6-c) edge (6-d);
\end{tikzpicture}
这是我想要更改的循环的输出:
有没有办法可以创建一个宏来插入一个没有箭头的循环,或者添加一个参数来edge[loop right]
告诉它不要画箭头?
答案1
您可以使用every loop
钥匙本地即在路径中,因此其全局值不会改变。也就是说,对于所有其他路径,您仍将获得箭头。
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,
auto,node distance=2.0cm,semithick,auto]
\foreach \i/\t in {0/directed,6/undirected}{
\foreach \x/\y/\v in {0/2/a,2/2/b,0/0/c,2/0/d}{
\pgfmathtruncatemacro\xx{\x+\i};
\node [draw,circle,minimum size=4mm] (\i-\v) at (\xx,\y) {};
\node at (\i-\v) {\(\v\)};
}
\pgfmathtruncatemacro\xt{\i+1};
\node at (\xt,-0.6) {\t};
}
\path (0-b) edge[loop right] (0-b);
\path[every loop/.style={-}] (6-b) edge[loop right] (6-b); % this is the loop i want to change
\foreach \src/\tgt in {a/c,d/b,d/a}{
\path (0-\src) edge (0-\tgt);
\path [shorten >= 0pt,-](6-\src) edge (6-\tgt);
}
\path (0-c) edge[bend left=10] (0-d);
\path (0-d) edge[bend left=10] (0-c);
\path [shorten >= 0pt,-](6-c) edge (6-d);
\end{tikzpicture}
\end{document}
问题tikzlibrarytopaths.code.tex
在于
\tikzset{loop/.style= {to path={
\pgfextra{\let\tikztotarget=\tikztostart}
[looseness=8,min distance=5mm,every loop]
\tikz@to@curve@path
}}}
\tikzset{every loop/.style= {->,shorten >=1pt}}
所以 aloop
会一直看着every loop
。