在 TikZ 循环中设置全局变量

在 TikZ 循环中设置全局变量

我通过反复复制以下几行来制作下面的图画:

\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

所以这告诉我我需要设置rc为全局变量,但它没有说明如何做到这一点。有人能解释一下吗?

\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

我不太确定你想要初始定义什么,但可能你不需要将任何东西设为全局的。相反,只需使用rememberfor 循环即可。例如,

\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}

相关内容