\foreach 表格列的元素

\foreach 表格列的元素

我想为的\foreach列中的每个元素编写一个。例如:Labelmy.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}

结果:

结果

相关内容