我遇到了以下问题:我想在 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}
如果您替换\pgfmathresult
或0
删除可选参数,您将看到正确的蓝色 3 个梯形。
你能告诉我我错在哪里吗?谢谢
答案1
\pgfmathresult
是一个临时寄存器,TikZ 本身非常频繁地使用它。因此,在你在自定义宏中使用它之前,它已被 TikZ 多次覆盖。你可以通过以下方式扩展该值\pgfmathresult
:
\expandafter\moireeTest\expandafter[\pgfmathresult]{5}{3}
当你调用它时,它的当前值被传递,或者你可以将结果设置为不受其他事物干扰的其他宏,例如
\pgfmathsetmacro\mycustomresult{360/80/1*0}
\moireeTest[\mycustomresult]{5}{3}