midway 与 chains 库结合使用时似乎不起作用

midway 与 chains 库结合使用时似乎不起作用

在以下示例文档中,

\documentclass[tikz]{standalone}

\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}

%circle
\draw[black, thick] (0,0) circle (5);    
    %binding sites
    \begin{scope}[start chain=bindingchain]
    \foreach \a/\c in {150/green, 270/red, 390/blue}
    \draw[gray] (0,0) -- (\a:5) coordinate[\c, midway, thick, draw, circle, minimum width=25, on chain];
    \end{scope}
\end{tikzpicture}
\end{document}

我希望蓝色、红色和绿色圆圈位于线的中间。但是,蓝色和红色圆圈偏离了:

pdflatex 生成的输出

有人能解释为什么会发生这种情况,以及如何解决它吗?

编辑:虽然 Stefan Pinnow 的回答解决了我最初的问题,因为它避免了对库的依赖,但我仍然对为什么以这种方式交互chains感兴趣。chainsmidway

答案1

Acoordinate观点。对于有尺寸的东西来说,使用这个是没有意义的。这些应该是节点。我有点惊讶代码居然能编译通过。

纠正这个问题实际上并不会改变输出:

\draw[gray] (0,0) -- (\a:5) node [\c, midway, thick, draw, circle, minimum width=25, on chain] {};

但它更有意义。

Achain有方向。默认情况下,链是going right。这意味着链上的每个节点都设置在前一个节点的右侧。

可能发生的情况如下:

  1. TikZ 移动到原点和 之间的中点(\a:5)
  2. on chain然后,它通过按标准向右移动来添加效果node distance,但保留默认center锚点。

这是一张显示蓝色圆圈和两个黑色圆圈的图片。第一个圆圈在 (1) 处绘制,第二个圆圈在 (2) 处绘制,这些圆圈均来自上述指定的动作:

等价

通常情况下,的效果going right是用作west锚点,但center这里似乎保留了默认值。

如果要向链中添加节点,但又不希望链决定节点的位置,则不要使用on chain。而是先创建节点,然后使用\chainin ();

例如,scopes为了方便添加库:

\begin{tikzpicture}
  \draw[black, thick] (0,0) circle (5);
  {[start chain=bindingchain]
    \foreach \a/\c in {150/green, 270/red, 390/blue}
    {
      \draw[gray] (0,0) -- (\a:5) node (\c) [\c, midway, thick, draw, circle, minimum width=25] {};
      \chainin (\c);
    }
  }
\end{tikzpicture}

链接节点

如果您想使用该join选项,您可以在\chainin节点时添加它。例如:

\begin{tikzpicture}
  \draw[black, thick] (0,0) circle (5);
  {[start chain=bindingchain]
    \foreach \a/\c in {150/green, 270/red, 390/blue}
    {
      \draw[gray] (0,0) -- (\a:5) node (\c) [\c, midway, thick, draw, circle, minimum width=25] {};
      \chainin (\c) [join];
    }
  }
\end{tikzpicture}

加入连锁店

可以按照类似的方式添加其他链条选项。

完整代码:

\documentclass[tikz,multi,border=10pt]{standalone}
\usetikzlibrary{chains,scopes}
\begin{document}
\begin{tikzpicture}
  \draw[black, thick] (0,0) circle (5);
  {[start chain=bindingchain]
    \foreach \a/\c in {150/green, 270/red, 390/blue}
    {
      \draw[gray] (0,0) -- (\a:5) node (\c) [\c, midway, thick, draw, circle, minimum width=25] {};
      \chainin (\c);
    }
  }
\end{tikzpicture}
\begin{tikzpicture}
  \draw[black, thick] (0,0) circle (5);
  {[start chain=bindingchain]
    \foreach \a/\c in {150/green, 270/red, 390/blue}
    {
      \draw[gray] (0,0) -- (\a:5) node (\c) [\c, midway, thick, draw, circle, minimum width=25] {};
      \chainin (\c) [join];
    }
  }
\end{tikzpicture}
\begin{tikzpicture}
  \draw[black, thick] (0,0) circle (5);
  {[start chain=first]
    \node [on chain, thick, double, draw, circle, minimum width=25] at (270:2.5) {};
    \node  [on chain, thick, double, draw, circle, minimum width=25, anchor=center] {};
    \node (s) [thick, double, draw, circle, minimum width=25] at (390:2.5) {};
    \chainin (s);
    \node  [on chain, thick, double, draw, circle, minimum width=25, anchor=center] {};
  }
  \begin{scope}[start chain=bindingchain]
    \foreach \a/\c in {150/green, 270/red, 390/blue}
    \draw[gray] (0,0) -- (\a:5) node [\c, midway, thick, draw, circle, minimum width=25, on chain] {};
  \end{scope}
\end{tikzpicture}
\end{document}

答案2

这一切都可以在没有图书馆的情况下完成chains......

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
    %circle
    \draw[black, thick] (0,0) circle (5);
    \foreach \a/\c/\name in {150/green/a, 270/red/b, 390/blue/c}
        \draw[gray] (0,0) -- (\a:5)
            node [\c, midway, thick, draw, circle, minimum size=25]
                (\name) {}
        ;
    \draw (a) -- (b) -- (c);
\end{tikzpicture}
\end{document}

该图显示了上述代码的结果

相关内容