我正在尝试理解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
保留结果外什么也不提供。