与...有关系一个答案,我发现\foreach
无法理解中的常量(n
)declare function
。这是一个错误吗?或者对于这种情况还有其他正确的代码方法吗?
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\n{7} % number of sides of a heptagon
\pgfmathsetmacro{\k}{360/\n}
\pgfmathsetmacro{\r}{2}
\draw[cyan] (90:\r) foreach \i in {1,...,\n} {--({90+\k*\i}:\r)}--cycle;
\end{tikzpicture}
% This does not work! Uncomment this tikzpicture to get a MWE
\begin{tikzpicture}[declare function={n=7;r=2;k=360/n;}]
\draw (90:r) foreach \i in {1,...,n} {--({90+k*\i}:r)}--cycle;
\end{tikzpicture}
% This works, but not natural! Is that a bug of \foreach ?
\begin{tikzpicture}[declare function={n=7;r=2;k=360/n;}]
\pgfmathsetmacro\m{n}
\draw (90:r) foreach \i in {1,...,\m} {--({90+k*\i}:r)}--cycle;
\end{tikzpicture}
\end{document}
答案1
自 PGF 3.1.2(我认为)起,您可以使用parse=true
选项\foreach
。
在这种情况下,您必须n
用括号括起来,以便\foreach
将其解析为数学表达式。如果没有括号,\foreach
则会假定您想要一个字母循环a,...,n
,但由于下限不是字母,因此它会中断。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[declare function={n=7;r=2;k=360/n;}]
\draw (90:r) foreach \i [parse=true] in {1,...,(n)} { -- ({90+k*\i}:r) } --cycle;
\end{tikzpicture}
\end{document}