Arrow 与 Tikz 严重关联

Arrow 与 Tikz 严重关联

我正在用 TIKZ(和 KTIKZ)制作一个小方案,在两个节点之间绘制箭头时遇到问题。我想使用以下脚本从B到绘制一个箭头:C\draw

\tikzstyle{startstop} = [circle, rounded corners,text centered,text width=2cm,inner sep=0mm,outer sep=20mm, draw=black, fill=blue!50]
\begin{tikzpicture}%
\node (A) [startstop] {A};
\node at (A.east) (B) [startstop] {B};
\node at (B.south) (C) [startstop] {C};
\draw [line width=1mm,->,>=stealth]  (B) -- (C);
\end{tikzpicture}

我得到以下结果:

在此处输入图片描述

你知道什么地方出了问题吗?

答案1

有两件事导致代码给出的结果不直观。如果我们修复节点位置并稍微改变路径,就更容易看出,

\begin{tikzpicture}[startstop/.style={circle,inner sep=0mm,outer sep=18mm,draw=black,fill=blue!50}]
\node[startstop] (A)  {A};
\node[startstop] (B)  at (2,0) {B};
\node[startstop] (C)  at (2,-2) {C};
\draw[line width=1mm,->,>=stealth]  (B) -- (C);
\draw[red,opacity=0.25] (B) circle (1.8cm+1ex) (C) circle (1.8cm+1ex);
\end{tikzpicture}

在此处输入图片描述

您可以看到 的边框点B现在几乎在 上,C但绘制边框所需的点几乎在 上B。这就是在节点形状周围添加分隔的效果outer sep。如果您将外分隔增加回 2cm,箭头就会翻转。

我认为您之所以选择这样做是因为您希望节点具有相对位置。您应该做的是语法positioning

    \usetikzlibrary{positioning}% In the preamble 


    \begin{tikzpicture}[startstop/.style={circle,
                                          inner sep=0mm,outer sep=0,
                                          draw=black,fill=blue!50,
                                          minimum width=2cm}
                       ]
    \node[startstop] (A)  {A};
    \node[startstop,right= 2cm of A] (B)  {B};
    \node[startstop,below= 2cm of B] (C) {C};
    \draw [line width=1mm,->,>=stealth]  (B) -- (C);
    \end{tikzpicture}

在此处输入图片描述 现在您可以看到,无论节点有多大,它们之间的距离仍然是 2 厘米。您可以跳过声明2cm,只需说right = of A,然后距离是从的值中读取的node distance。因此,如果您在图片选项中设置它,则所有对该语法的调用都是相同的。

还要注意,要更改节点大小,您不需要调整文本宽度或高度。形状大小可以通过最小高度宽度键更改。

手册中总会包含有关这些内容的更多信息,但这里有一些之前出现过的相关文章。

相关内容