如何在不使用“每个循环”命令的情况下从 TikZ 图中的单个循环中删除箭头?

如何在不使用“每个循环”命令的情况下从 TikZ 图中的单个循环中删除箭头?

我正在尝试绘制有向图和无向图的示例,并且我希望无向图中的循环没有箭头。

我知道我可以使用\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

相关内容