`\foreach` 不理解 `declare function` 中的常量:是一个错误?

`\foreach` 不理解 `declare function` 中的常量:是一个错误?

与...有关系一个答案,我发现\foreach无法理解中的常量(ndeclare 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}

相关内容