\pgfplotstableread 从 \pgfplotsinvokeforeach 键动态创建加载表宏

\pgfplotstableread 从 \pgfplotsinvokeforeach 键动态创建加载表宏

我正在尝试使用循环加载大量 CSV\pgfplotstableread并动态地为它们分配宏名称\pgfplotsinvokeforeach。我试过了\csname,但怀疑这是完全错误的方法!

\newcommand{\PlotsAuto}[1]{
  \pgfplotsinvokeforeach{NoGender,Female,Male}{
    \pgfplotstableread{../Data/My#1data-##1.csv}{\csname \##1\endcsname}
  }
}

我无法用 来做到这一点,\foreach因为加载的表对于该环境来说是本地的。(我尝试过,\foreach \gender/\name in {NoGender/\NoGender....但没有成功)

那么我如何在创建图表的未来循环中访问这些内容?

答案1

这似乎是一个常见的扩展问题。但请不要用宏来处理这个数字。这确实是不必要的复杂化。请考虑使用批处理文件名处理。

\documentclass{article}
\usepackage{pgfplotstable,filecontents}
\begin{filecontents*}{Myreddata-Female4yr.csv}
a b
1 2
3 4
\end{filecontents*}
\begin{filecontents*}{Myreddata-Male23.csv}
a b
5 6
7 8
\end{filecontents*}

\newcommand{\PlotsAuto}[1]{%
  \pgfplotsinvokeforeach{Female4yr,Male23}{%
    \begingroup\edef\temp{%
       \endgroup\noexpand\pgfplotstableread{My#1data-##1.csv}{\csname ##1\endcsname}}%
    \temp%
  }%
}
\begin{document}
\PlotsAuto{red}
\expandafter\pgfplotstabletypeset\csname Male23\endcsname
\expandafter\pgfplotstabletypeset\csname Female4yr\endcsname
\end{document}

在此处输入图片描述

相关内容