我正在尝试制作一个 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}
答案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}