我想为的\foreach
列中的每个元素编写一个。例如:Label
my.dat
\foreach \L[count=\i] in column {Label} from {my.dat}
正确的语法是什么?我找不到任何地方。
\begin{filecontents}{my.dat}
Label Value
AS 1
JK .9
OW 1.5
CU 3.1
TR .5
\end{filecontents}
答案1
你可以尝试\csvloop
从包中获取csvsimple
:
\documentclass{article}
\usepackage{filecontents}
\usepackage{csvsimple}
\begin{filecontents*}{my.dat}
Label,Value
AS,1
JK,.9
OW,1.5
CU,3.1
TR,.5
\end{filecontents*}
\begin{document}
\csvloop{file={my.dat}, head to column names, command={\csvcoli\ is row number \thecsvrow\\}}
\end{document}
查看csvsimple 手册了解更多信息。
答案2
pgfplotstable
提供读取数据和循环访问数据的函数,可以在 TikZ 图片内部使用。例如:
\documentclass{standalone}
\usepackage{tikz}
\usepackage{filecontents}
\usepackage{pgfplotstable}
\begin{filecontents}{my.dat}
Label Value
AS 1
JK .9
OW 1.5
CU 3.1
TR .5
\end{filecontents}
\begin{document}
% First, read the table into a data structure
\pgfplotstableread{my.dat}{\MyData}
\begin{tikzpicture}
\node[draw,circle, fill=red] (Origin) at (0,0) {};
% Following loop is equivalent to your proposed
% \foreach \L[count=\i] in column {Label} from {my.dat}
\pgfplotstableforeachcolumnelement{Label}\of\MyData\as\L{%
\edef\i{\pgfplotstablerow}
\draw (Origin) -- (60*\i:2) node[circle,draw,fill=orange!20] {\L};
}
\end{tikzpicture}
\end{document}
结果: