
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@next
estuviera completo.
En la linea de \end{document}
me salen los tres errores
Falta
\endgroup
insertado.Falta
}
insertado.Error de LaTeX:
\begin{tikzpicture}
en la línea de entrada 12 terminada en\end{document}
.
Cuando reemplazo el código dentro tikzpicture
expandiendo la \boxesAtHeight
macro, obtengo los mismos errores.
Cuando amplío aún más la \drawSquare
macro, obtengo el siguiente resultado
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 \drawSquare
macro 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}