我通过反复复制以下几行来制作下面的图画:
\tikzmath{\r=\r/2;\c=\r/sqrt(2);}
\draw (-\c, \c) circle (\r);
\draw (\c, -\c) circle (\r);
为了简化我的代码,我尝试将这些行放在 for 循环中(如下所示),但这不起作用。我查阅了 TikZ v3.01a 手册,其中第 901 页指出:
请注意,每次执行时,都会将
<commands>
其<commands>
放入一个 TEX 组中。这意味着对内部计数器的本地更改<commands>
不会持续到下一次迭代。例如,如果您在本地将 1 添加到内部计数器,那么在下一次迭代中,计数器将具有与第一次迭代开始时相同的值。如果您希望更改在迭代之间持续存在,则<commands>
必须添加。\global
所以这告诉我我需要设置r
和c
为全局变量,但它没有说明如何做到这一点。有人能解释一下吗?
\documentclass{standalone}
%Packages Used
\usepackage{tikz}
\usepackage{pgfmath}
\usetikzlibrary{math}
\usepackage{pgffor}
\begin{document}
% -- Failing Code
\begin{tikzpicture}
%defining variables
\def\r{7}
\def\c{0}
\draw (\c,\c) circle (\r);
\foreach \x in {1,2,3,4,5,6}
{
\tikzmath{\r=\r/2;\c=\r/sqrt(2);}
\draw (-\c, \c) circle (\r);
\draw (\c, -\c) circle (\r);
}
\end{tikzpicture}
% -- End Failing Code
\end{document}
答案1
我不太确定你想要初始定义什么,但可能你不需要将任何东西设为全局的。相反,只需使用remember
for 循环即可。例如,
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{math}
\begin{document}
\begin{tikzpicture}
%defining variables
\def\r{7}
\def\c{0}
\draw (\c,\c) circle (\r);
\foreach \x [remember=\r as \rlast (initially 7)] in {1,2,3,4,5,6}
{
\tikzmath{\r=\rlast/2;\c=\r/sqrt(2);}
\draw (-\c, \c) circle (\r);
\draw (\c, -\c) circle (\r);
}
\end{tikzpicture}
\end{document}
生产
如果你确实需要全局变量,你肯定会选择除 和 之外的名称,\r
因为\c
你可能会用 覆盖现有的宏\def
。这在图片中可能无关紧要,但在图片之外可能很重要。
编辑
回复评论:你可能需要类似的东西
\def\rorig{7}
...
\draw (\c,\c) circle (\rorig);
\foreach \x [remember=\r as \rlast (initially \rorig)] in {1,2,3,4,5,6}