为什么pgffor计算不正确?

为什么pgffor计算不正确?

我遇到了以下问题:我想在 tikz 中绘制一些莫尔条纹效果。这似乎没有问题。我做到了,没有任何错误(两个梯形圆圈)。现在两个环应该稍微移动一下。我添加了一些内容,但什么都不起作用了。我在下面给你一个简化的代码。不幸的是,只有当我用 pgfmath 计算移动时才会出现问题。如果我直接给出它们,那就好了,没有错误。

(简化的)代码:

\documentclass[a4paper,12pt,notitlepage]{article}
\usepackage{tikz}
\usepackage{pgffor}
\usetikzlibrary{scopes}
\newcommand{\drawCircularLines}[2]
{
    \foreach \i 
    [
        evaluate=\i as \startAngle using 360/#1*(\i-1)+#2,
        evaluate=\i as \endAngle using 360/(2*#1)*(2*\i-1)+#2
    ]
    in {1,...,#1}
    {
        \draw (\startAngle:2cm) -- (\startAngle:3cm) -- (\endAngle:3cm) -- (\endAngle:2cm) -- cycle;
    }
}

\newcommand{\moireeTest}[3][0]
{
    \begin{figure}
    \centering
    \begin{tikzpicture}
        { [color=red]
            \drawCircularLines{#2}{0}
        }
        { [color=blue]
            \drawCircularLines{#3}{#1}
        }
    \end{tikzpicture}
    \caption{Moiree Test mit #2 und #3 Strichen (Delta #1).}
    \end{figure}
}

\begin{document}

\pgfmathparse{360/80/1*0}
\moireeTest[\pgfmathresult]{5}{3}

\end{document}

如果您替换\pgfmathresult0删除可选参数,您将看到正确的蓝色 3 个梯形。

你能告诉我我错在哪里吗?谢谢

答案1

\pgfmathresult是一个临时寄存器,TikZ 本身非常频繁地使用它。因此,在你在自定义宏中使用它之前,它已被 TikZ 多次覆盖。你可以通过以下方式扩展该值\pgfmathresult

\expandafter\moireeTest\expandafter[\pgfmathresult]{5}{3}

当你调用它时,它的当前值被传递,或者你可以将结果设置为不受其他事物干扰的其他宏,例如

\pgfmathsetmacro\mycustomresult{360/80/1*0}
\moireeTest[\mycustomresult]{5}{3}

相关内容