在 tikz foreach 循环中使用 etoolbox 宏

在 tikz foreach 循环中使用 etoolbox 宏

我正在尝试理解etoolbox如何使用 TikZ。在这个例子(我知道可能有更简单的方法可以做到这一点),我想绘制一系列彼此相邻的矩形。通常,方法是从一个矩形开始,声明一个与矩形原点对角的点,然后将矩形绘制到该点。然后,我将使用 TikZ 命令进行迭代\foreach以创建 15 个这样的块。目前,我的代码如下所示:

\documentclass[11pt]{article}

\usepackage{tikz}
\usepackage{etoolbox}
\usetikzlibrary{shapes.geometric,%
shapes.symbols,%
shapes.misc,%
fit,%
positioning,%
decorations.pathmorphing,%
decorations.pathreplacing,%
decorations.text,%
shadows,%
fadings}

\providetoggle{isodd} 

\begin{document}
\begin{tikzpicture}[%
scale=0.5
]

\coordinate (bar-origin) at (0,0) ;
\coordinate[above right=50mm and 148mm of bar-origin] (bar0) ; 

\foreach \x in {1,2,...,15}{%
\pgfmathparse{\x-1}
\iftoggle{isodd}{\global\togglefalse{isodd}%
    \coordinate[above right=50mm and 34mm of bar\pgfmathresult]  (bar\x) ; 
}%
{\global\toggletrue{isodd}
    \coordinate[below right=50mm and 34mm of bar\pgfmathresult]  (bar\x) ; 
}%

\draw[fill=green,draw=black] (bar\pgfmathresult) rectangle (bar\x) ; 

}


\end{tikzpicture}
\end{document}

编辑:以上代码有效。谢谢!

请放心,这\providetoggle{isodd}是代码中较早的部分。奇怪的是,这段代码似乎产生了某种无限循环。也就是说,pdflatex挂起的同时仍然消耗着处理器的电量。我做错了什么,我怎么能以类似的方式做到这一点?

答案1

etoolbox由于不太理解代码应该做什么,我提前致歉,但这是我能读懂的代码的直译。

%Required \usetikzlibrary{positioning} in the preamble

\begin{tikzpicture}[scale=0.5]

\coordinate (bar-origin) at (0,0) ;
\coordinate[above right=50mm and 148mm of bar-origin] (bar0) ;

\foreach \x[remember=\x as \lastx(initially 0)] in {1,2,...,15}{
\pgfmathparse{Mod(\x,2)<1?"below right":"above right"}
\coordinate[\pgfmathresult=50mm and 34mm of bar\lastx] (bar\x);
\draw[fill=green,draw=black] (bar\lastx) rectangle (bar\x); 
}
\end{tikzpicture}

在此处输入图片描述

使用节点也可以实现相同的结果。

答案2

一个循环中的每个步骤\foreach都是成组执行的,因此从外部看不到切换开关的变化。

使用\global\toggletrue{isodd}\global\togglefalse{isodd}

正如 percusse 在评论中指出的那样,使用也\pgfmathparse应该修正:

\pgfmathparse{\x-1}除了\pgfmathresult保留结果外什么也不提供。

相关内容