Usando nuevos comandos dentro del bucle tikzpicture para cada bucle

Usando nuevos comandos dentro del bucle tikzpicture para cada bucle

Estoy intentando anidar comandos en mis páginas de TikZ para poder hacer cosas progresivamente más complicadas con pequeños fragmentos de código en cada nivel. El código que tengo hasta ahora es

\documentclass{article}
\usepackage{tkz-graph}

\newcommand{\drawSquare}[3]{%
  \draw[thick,#3] (#1-0.5,#2-0.5) rectangle (#1+0.5,#2+0.5);}
\newcommand{\boxesAtHeight}[3]{%
  \foreach \i in {1,...,#1}
    \drawSquare{\i}{#2}{#3}}

\begin{document}

\begin{tikzpicture}
  \boxesAtHeight{4}{0}{black}
  \boxesAtHeight{2}{1}{black}
  \boxesAtHeight{1}{2}{black}
\end{tikzpicture}

\end{document}

Utilizo sharelatex y cuando intento compilar, obtengo 4 errores. En la línea siguiente \end{tikzpicture}me aparece el error.

El párrafo terminado antes de que \pgffor@nextestuviera completo.

En la linea de \end{document}me salen los tres errores

Falta \endgroupinsertado.

Falta }insertado.

Error de LaTeX: \begin{tikzpicture}en la línea de entrada 12 terminada en \end{document}.

Cuando reemplazo el código dentro tikzpictureexpandiendo la \boxesAtHeightmacro, obtengo los mismos errores.

Cuando amplío aún más la \drawSquaremacro, obtengo el siguiente resultado

resultado exitoso después de expandir cada macro

Para ser claros, la primera expansión resultó en el código

\begin{tikzpicture}
  \foreach \i in {1,...,4}
    \drawSquare{\i}{0}{black}
  \foreach \i in {1,...,2}
    \drawSquare{\i}{1}{black}
  \foreach \i in {1,...,1}
    \drawSquare{\i}{2}{black}
\end{tikzpicture}

Y la segunda expansión resultó en el código.

\begin{tikzpicture}
  \foreach \i in {1,...,4}
    \draw[thick,black] (\i-0.5,0-0.5) rectangle (\i+0.5,0+0.5);
  \foreach \i in {1,...,2}
    \draw[thick,black] (\i-0.5,1-0.5) rectangle (\i+0.5,1+0.5);
  \foreach \i in {1,...,1}
    \draw[thick,black] (\i-0.5,2-0.5) rectangle (\i+0.5,2+0.5);
\end{tikzpicture}

¿Alguien puede explicarme por qué recibo errores? Sé que la \drawSquaremacro funciona fuera de los bucles.

Respuesta1

Necesitas agrupar el cuerpo del bucle for:

\documentclass{article}
\usepackage{tkz-graph}

\newcommand{\drawSquare}[3]{%
  \draw[thick,#3] (#1-0.5,#2-0.5) rectangle (#1+0.5,#2+0.5);}
\newcommand{\boxesAtHeight}[3]{%
  \foreach \i in {1,...,#1}
    {\drawSquare{\i}{#2}{#3}}}%<== put the \drawSquare{\i}{#2}{#3} in {}

\begin{document}

\begin{tikzpicture}
  \boxesAtHeight{4}{0}{black}
  \boxesAtHeight{2}{1}{black}
  \boxesAtHeight{1}{2}{black}
\end{tikzpicture}

\end{document}

resultado

información relacionada