
Ich schreibe ein Makro, das als einzigen Parameter eine Liste von Zahlen verwendet. Wenn ich die Liste durchlaufe, möchte ich den Index des Elements in der Liste verfolgen. Hier ist ein Beispiel für das, was ich möchte:
% \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}
Wenn ich davon ausgehe, dass \index
ich auf diese Weise mein Ziel erreiche, würde ich das Makro folgendermaßen schreiben:
\newcommand{\mymacro}[1]%
{\begin{tikzpicture}
\foreach \height in #1 {
\draw (\index,0) -- +(0,\height);
}
\end{tikzpicture}}
Gibt es eine Möglichkeit, dies zu tun? Ich weiß, dass \myMacro{2/1,1/2,3/3}
ich, wenn ich es als aufrufen wollte, eine Zeile durch ersetzen könnte \foreach \height/\index in #1 {
, aber ich würde es viel lieber nicht tun, die Indizes im Parameter übergeben zu müssen.
Antwort1
Das pgffor
Paket (Teil von tikz
) stellt count
hierfür einen Schlüssel bereit, den Sie einem Makro zuweisen können. Beachten Sie, dass Sie in Ihrer Makrodefinition { }
das benötigen.#1
\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}