
Estou tentando aninhar comandos em minhas páginas TikZ para poder tornar coisas cada vez mais complicadas com pequenos pedaços de código em cada nível. O código que tenho até agora é
\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}
Eu uso sharelatex e quando tento compilar recebo 4 erros. Na linha depois \end{tikzpicture}
, tenho o erro
O parágrafo terminou antes de
\pgffor@next
ser concluído.
Na linha de \end{document}
, recebo os três erros
Faltando
\endgroup
inserido.Faltando
}
inserido.Erro LaTeX:
\begin{tikzpicture}
na linha de entrada 12 terminada por\end{document}
.
Quando substituo o código tikzpicture
expandindo a \boxesAtHeight
macro, recebo os mesmos erros.
Quando expando ainda mais a \drawSquare
macro, obtenho a seguinte saída
Para ser claro, a primeira expansão resultou no 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}
E a segunda expansão resultou no 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}
Alguém pode me explicar por que estou recebendo erros? Eu sei que a \drawSquare
macro funciona fora dos loops.
Responder1
Você precisa agrupar o corpo do loop 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}