
Я пытаюсь вкладывать команды в свои страницы TikZ, чтобы я мог делать все более сложные вещи с небольшими фрагментами кода на каждом уровне. Код, который у меня есть на данный момент, это
\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}
Я использую sharelatex, и когда я пытаюсь скомпилировать, я получаю 4 ошибки. На строке после \end{tikzpicture}
у меня есть ошибка
Абзац закончился до того, как
\pgffor@next
был завершён.
В строке \end{document}
я получаю три ошибки
Отсутствует
\endgroup
вставленный текст.Отсутствует
}
вставленный текст.Ошибка LaTeX:
\begin{tikzpicture}
строка ввода 12 заканчивается на\end{document}
.
Когда я заменяю код внутри макроса , tikzpicture
расширяя его \boxesAtHeight
, я получаю те же ошибки.
При дальнейшем расширении макроса \drawSquare
я получаю следующий вывод
Для ясности, первое расширение привело к коду
\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}
И второе расширение привело к коду
\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}
Кто-нибудь может мне объяснить, почему у меня возникают ошибки? Я знаю, что \drawSquare
макрос работает вне циклов.
решение1
Вам необходимо сгруппировать тело цикла 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}