Verwenden von Newcommands innerhalb der TikzPicture-Foreach-Schleife

Verwenden von Newcommands innerhalb der TikzPicture-Foreach-Schleife

Ich versuche, Befehle in meine TikZ-Seiten einzubetten, damit ich mit kleinen Codestücken auf jeder Ebene zunehmend kompliziertere Dinge erstellen kann. Der Code, den ich bisher habe, ist

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

Ich verwende Sharelatex und wenn ich versuche zu kompilieren, bekomme ich 4 Fehler. In der Zeile nach \end{tikzpicture}habe ich den Fehler

Der Absatz wurde beendet, bevor \pgffor@nexter abgeschlossen war.

In der Zeile \end{document}erhalte ich die drei Fehler

Fehlt \endgroupeingefügt.

Fehlt }eingefügt.

LaTeX-Fehler: \begin{tikzpicture}Eingabezeile 12 beendet mit \end{document}.

Wenn ich den Code darin tikzpicturedurch Erweitern des \boxesAtHeightMakros ersetze, erhalte ich die gleichen Fehler.

Wenn ich das Makro weiter erweitere \drawSquare, erhalte ich die folgende Ausgabe

erfolgreiche Ausgabe nach dem Erweitern aller Makros

Um es klar zu sagen, die erste Erweiterung führte zu dem Code

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

Und die zweite Erweiterung führte zum Code

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

Kann mir jemand erklären, warum ich Fehlermeldungen bekomme? Ich weiß, dass das \drawSquareMakro außerhalb von Schleifen funktioniert.

Antwort1

Sie müssen den Hauptteil der For-Schleife gruppieren:

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

Ergebnis

verwandte Informationen