Por que não posso usar variável no loop for do tikzmath?

Por que não posso usar variável no loop for do tikzmath?

Estou tentando desenhar um lote de círculos usando o código a seguir. No entanto, não consegui criar a figura que desejo. e recebi um erro dizendo undefined control sequence. argument 0,...,\NY. Mas se eu mudar \NYpara 4. isso funciona bem. Por que não posso usar \NY no {0,...,\NY}?

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,arrows}
\usetikzlibrary{math}
\usetikzlibrary{positioning,calc}

\begin{document}
\begin{tikzpicture}
  \tikzmath{
    \VX = 30;
    \VY = 30;
    int \NX = 6;
    int \NY = 4;
    int \nix; int \niy;
    \OX = 0; \OY = 0;
    for \niy in {0,...,\NY}{%
      for \nix in {0,...,6}{%
        {\node [circle, draw = red, minimum size = \VX pt] at (\nix*\VX pt,\niy*\VY pt) {};};
      };
    };
  };
\end{tikzpicture}
\end{document}

Responder1

Coisas como

int \NY = 4;

não é permitido. Usar

int \NY; \NY = 4;

em vez disso, seu MWE funcionará:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,arrows}
\usetikzlibrary{math}
\usetikzlibrary{positioning,calc}

\begin{document}
\begin{tikzpicture}
  \tikzmath{
    \VX = 30;
    \VY = 30;
    int \NX; \NX = 6;
    int \NY; \NY = 4;
    int \nix; int \niy;
    \OX = 0; \OY = 0;
    for \niy in {0,...,\NY}{%
      for \nix in {0,...,\NX}{%
        {\node [circle, draw = red, minimum size = \VX pt] at (\nix*\VX pt,\niy*\VY pt) {};};
      };
    };
  };
\end{tikzpicture}
\end{document} 

insira a descrição da imagem aqui

Responder2

Alternativamente, você pode usar \newcommand\NX{6} \newcommand\NY{4}no preâmbulo e também no loop.

insira a descrição da imagem aqui

MWE:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,arrows}
\usetikzlibrary{math}
\usetikzlibrary{positioning,calc}
\newcommand\NX{6}
\newcommand\NY{4}
\begin{document}
\begin{tikzpicture}
  \tikzmath{
    \VX = 30;
    \VY = 30;
    int \nix; int \niy;
    \OX = 0; \OY = 0;
    for \niy in {0,...,\NY}{%
      for \nix in {0,...,\NX}{%
        {\node [circle, draw = red, minimum size = \VX pt] at (\nix*\VX pt,\niy*\VY pt) {};};
      };
    };
  };
\end{tikzpicture}
\end{document}

informação relacionada