Como incrementar uma variável a cada vez através de um loop

Como incrementar uma variável a cada vez através de um loop

Estou escrevendo uma macro que usa uma lista de números como único parâmetro. Quando eu percorrer a lista, gostaria de acompanhar o índice do item na lista. Aqui está um exemplo do que eu quero:

% \myMacro{2,1,3} \\ % this is the same as what follows

\begin{tikzpicture}
  \draw (1,0) -- +(0,2);
  \draw (2,0) -- +(0,1);
  \draw (3,0) -- +(0,3);
\end{tikzpicture}

Fingindo que essa \indexé a maneira de conseguir o que quero, escreveria esta macro como:

\newcommand{\mymacro}[1]%
  {\begin{tikzpicture}
    \foreach \height in #1 {
      \draw (\index,0) -- +(0,\height);
    }
  \end{tikzpicture}}

Existe uma maneira de fazer isso? Eu sei que, se eu quisesse chamá-lo como \myMacro{2/1,1/2,3/3}, poderia substituir uma linha por \foreach \height/\index in #1 {, mas preferiria não precisar passar os índices no parâmetro.

Responder1

O pgffor pacote (parte de tikz) fornece uma countchave para isso que você pode atribuir a uma macro. Observe que você precisa { }de #1em sua definição de macro.

\documentclass{article}
\usepackage{tikz}
\newcommand{\mymacro}[1]%
  {\begin{tikzpicture}
    \foreach \height [count=\myindex] in {#1} {
      \draw (\myindex,0) -- +(0,\height);
    }
  \end{tikzpicture}}
\begin{document}  
\mymacro{2,1,3}
\end{document}

saída de código

informação relacionada