tikz 变量(节点)名称的基本误解

tikz 变量(节点)名称的基本误解

我正在尝试制作一个 7 循环,我希望以下代码能够生成一个缺少一条边的 7 循环。但是,图像完全乱了。

线路中发生了什么

\pgfmathparse{\s - 1};
\draw (\s) -- (\pgfmathresult);

我不明白吗?

\documentclass{standalone}
\usepackage{tikz} 
\begin{document}
\begin{tikzpicture}[every node/.style={circle,draw}]
  \def \n {7}
  \foreach \s in {1,...,\n}
  {
    \node (\s) at ({360/\n * (\s - 1)}:1) {};
  }
  \foreach \s in {2,...,\n} 
  {
    \pgfmathparse{\s - 1};
    \draw (\s) -- (\pgfmathresult);
  }
\end{tikzpicture}
\end{document}

破碎的 7 循环

答案1

它从整数变成浮点数。然后这个浮点数,比如说3.0,被解析为

<node name>.<angle anchor>

诸如此类(a.90)。您可以用来int(\s-1)截断小数。

答案2

正如 percusse 所说,问题在于\pgfmathresult产生3.0而不是3。除了计算\s - 1,另一种解决方案是使用remember键。(请参阅手册第 83 节。)

\begin{tikzpicture}[every node/.style={circle,draw}]
  \def \n {7}
  \foreach \s in {1,...,\n}
  {
    \node (\s) at ({360/\n * (\s - 1)}:1) {};
  }
  \foreach \s [remember=\s as \lasts (initially \n)] in {1,...,\n} 
  {
    \draw (\s) -- (\lasts);
  }
\end{tikzpicture}

答案3

或者不要使用\pgfmathparse...

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[every node/.style={circle,draw}]
  \def \n {7}
\foreach \s in {1,...,\n}
    \node (\s) at ({360/\n * (\s - 1)}:1) {};
\foreach [count=\sx from 1] \s in {2,...,\n}% <--- 
\draw (\s) -- (\sx);
\end{tikzpicture}
\end{document}

相关内容