
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@next
er abgeschlossen war.
In der Zeile \end{document}
erhalte ich die drei Fehler
Fehlt
\endgroup
eingefügt.Fehlt
}
eingefügt.LaTeX-Fehler:
\begin{tikzpicture}
Eingabezeile 12 beendet mit\end{document}
.
Wenn ich den Code darin tikzpicture
durch Erweitern des \boxesAtHeight
Makros ersetze, erhalte ich die gleichen Fehler.
Wenn ich das Makro weiter erweitere \drawSquare
, erhalte ich die folgende Ausgabe
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 \drawSquare
Makro 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}