8

Does TikZ have counter that is similar to for loop in c language and logical comparison? e.g.,

\foreach \x in {0mm,11.200000mm,...,33.600000mm}
{
  counter++; <== is this possible in tikz
  if(counter == 0) <== is this possible in tikz
    output something
}  

2 Answers 2

7

You have a new possibility perhaps interesting for you with pgf 2.1 (or with the last version of pgffor), you can use a new option count. I create two counters \xi and \yi, automatically for each loop you get \xi=\xi+1 etc.

\documentclass{scrartcl}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}[x=0.75cm,y=0.75cm] 
\foreach \x [count=\xi] in {0,...,6}
{\foreach \y [count=\yi] in {0,...,6}
{\ifnum\xi=\yi 
\node [draw, minimum size=0.666cm] at (\xi,-\yi) {$\infty$}; 
\else
\node [draw, minimum size=0.666cm] at (\xi,-\yi) {$\x\y$};
\fi }}
\end{tikzpicture}
\end{document}
2
  • 1
    this sounds an interesting thing. what is the initiative value for the counter, e.g. \xi? is it from 0?
    – warem
    Commented Mar 2, 2011 at 2:11
  • 1
    @warem: the pgfmanual gives /pgf/foreach/count=⟨macro⟩from⟨value⟩ so you can fix the initial value that you want! Commented Mar 2, 2011 at 6:25
3

You can use the normal LaTeX counters for that. You can define your own one using \newcounter{name}, set it using \setcounter{name}{value} or add to it using \addtocounter{name}{value}.

You can test counter values using \ifnum 0=\value{name} <true> \else <false> \fi or with the help of the ifthen package.

Note that the content for \foreach is executed inside a group and assignments which should survive to the next iteration or after the end of the loop must be global. Luckily the above set and add macros are global assignments anyway.

6
  • @Martin for a counter in Latex, how to do arithmetic, e.g., counter++ in the above example?
    – warem
    Commented Mar 1, 2011 at 8:56
  • @warem: like I wrote \addtocounter{name}{1}. There is also the PGFmath version of it which accepts more complicated arithmetic: \pgfmathaddtocounter{name}{expression} Commented Mar 1, 2011 at 9:06
  • @Martin \pgfmathaddtocounter is what i need. thank you.
    – warem
    Commented Mar 2, 2011 at 2:06
  • @Martin: how to define following c language: if(x == 1 && y % 4 == 0) pgfmanual is really a big stone. it is not easy to find something. and it takes time to finish reading it. i found in it that logical and is also &&, similar to c language, % uses mod. so i tried this: \ifnum\x=1 && mod(\y,4)=0 but it didn't work. by the way, how can i input enter in comment? the above content has paragraph style. but it came up in one big paragraph in the end.
    – warem
    Commented Mar 2, 2011 at 5:08
  • 1
    @Martin: i have read some other's example. none used complex logical comparison. at the beginning i hope to draw something in tikz depending on some complex logical comparison. now i give it up. my tex file is generated from my own program. some properties must be extracted from link list in c language. so it makes no sense to take much time in tikz in this part. i can generate the right sentences in my own program and write them into tex source file directly. anyway, thank you.
    – warem
    Commented Mar 2, 2011 at 8:16

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .