I'm drawing flow diagrams in Tikz, and they basically include a header, followed by a list of flow components set below an arrow. I've written functions to take arguments in Tikz before, but I'm wondering if there's any way to take in a "list" of arguments and loop through these with a for loop of some sort.

I've tried searching for similar items on google, but haven't gotten very far as I'm not exactly sure how to phrase what I'm looking for.


\newcommand{\FlowPipe}[3][FlowPipe]{ %first argument is x co-ord, second is array of text
    \draw[->] (#1,0) -- (#1+3,0);
    \foreach\argtext in {#2}{
         \node (#1,i) {\argtext};

Basically, for each item in the array, it should add a node at some specified distance below and put the text of that item there.

  • Could illustrate what you want to do with some pseudocode example. Also, can TikZ's \foreach do what you want, or do you need something more complicated? – Caramdir Nov 26 '10 at 19:16
  • added, I'm not sure that'll help but I hope it does. – EricR Nov 26 '10 at 19:41
  • It helps, because it shows what you want to do and gives a starting point for a solution. I'm not sure though what you intend to do with the first argument (the one you specified as optional with default parameter 'FlowPipe'). – Caramdir Nov 26 '10 at 20:48

The TikZ \foreach macro is handy for situations like this:


\newcommand\FlowPipe[2]{ %first argument is x co-ord, second is array of text
    \draw[->] (#1,0) -- ({#1+3},0);
    \foreach[count=\i] \argtext in {#2} {
         \node[anchor=south west] at (#1,{\i-0.9}) {\argtext};

\FlowPipe{1}{{first text},{second text},{with, comma}}


See section 56 ("Repeating Things: The Foreach Statement") in the TikZ/PGF v2.10 manual. The count option was introduced in TikZ v2.10, so you might need to update TikZ/PGF. The reason for using count instead of LaTeX counters in that counters are defined globally, and I do not know how to easily get local counters (otherwise a second call to the macro will produce an already defined error).

  • You shouldn't need the braces around first text and second text, since they don't contain commas. – Antal Spector-Zabusky Nov 26 '10 at 21:11
  • 1
    @Antal You are right. On the other hand they do not hurt and might make the code more readable. – Caramdir Nov 26 '10 at 23:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.