Ich habe eine CSV-Datei mit Zahlen, die ich als Argumente in einem von mir erstellten TiKZ-Makro verwenden möchte. Ich habe verschiedene Ansätze ausprobiert, aber es scheint Probleme mit der Erweiterung von Argumenten zu geben (Wirklichmöchte es nicht noch einmal versuchen \expandafter
), da ich nicht herausfinden kann, wie ich die Daten aus der Datei abrufen kann, ohne ein Makro als Argument für mein TiKZ-Makro zu verwenden.
MWE:
\begin{filecontents*}{data.csv}
10,4.2,green
20,6.4,blue
30,5.4,red
\end{filecontents*}
\documentclass{standalone}
\usepackage{tikz}
\newcommand{\spoke}[3]{%true angle, radius, colour
\fill[#3] (450-#1-5:0) -- (450-#1-5:#2) -- (450-#1-5:#2) arc (450-#1-5:450-#1+5:#2) -- (450-#1+5:0) -- (450-#1+5:#2) -- cycle;
}
\begin{document}
\begin{tikzpicture}
\spoke{10}{4.2}{green} %how do I get these from the file?
\end{tikzpicture}
\end{document}
Ich verwende Overleaf, daher bin ich in Bezug auf Pakete/Ansätze flexibel. Ich habe auch die volle Kontrolle über die Eingabe. Wenn es also einen einfacheren Weg als die Verwendung einer CSV-Datei gibt, würde ich diesen sehr gerne verwenden.
Antwort1
Das csvsimple
Paket kann das ganz einfach. :) Ich habe auch den TikZ-Code-Vorschlag hinzugefügt, der inSchrödingers KatzeKommentar zu deiner Frage.
\documentclass{standalone}
\begin{filecontents*}{\jobname-data.csv}
angle,radius,colour
10,4.2,green
20,6.4,blue
30,5.4,red
\end{filecontents*}
\usepackage{csvsimple}
\usepackage{tikz}
\newcommand{\spoke}[3]{%true angle, radius, colour
\fill[#3] (450-#1-5:0) -- (450-#1-5:#2)
arc[start angle=450-#1-5,end angle=450-#1+5,radius=#2];
% modified and more modern code here from Schrödinger'scat in the comments
}
\begin{document}
\begin{tikzpicture}
\csvreader[head to column names]{\jobname-data.csv}{}{
\spoke{\angle}{\radius}{\colour} %how do I get these from the file?
}
\end{tikzpicture}
\end{document}