在 tikzpicture foreach 循环中使用新命令

在 tikzpicture foreach 循环中使用新命令

我试图在 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}

结果

相关内容