Макрорасширение в табличной среде

Макрорасширение в табличной среде

У меня есть много разделенных табуляцией CSV-файлов, которые я хотел бы автоматически преобразовать в таблицы в табличной среде Latex. Таблицы называются:бревно_%где % может быть одним из символов \in {at,be,fr,....}. Например, каждый файл выглядит следующим образом:

 
accuracy    timepred    timelearn   timelearn2  timelearn4  rmsetrain
0.987747    0.532   2.44    nan nan 0.987676
0.987747    0.528   2.396   nan nan 0.987676
0.987747    0.544   2.408   nan nan 0.987676
0.987747    0.496   2.388   nan nan 0.987676
0.987747    0.436   2.432   nan nan 0.987676
0.987747    0.428   2.444   nan nan 0.987676
0.987747    0.464   2.452   nan nan 0.987676
0.987747    0.428   2.452   nan nan 0.987676
0.987747    0.464   2.46    nan nan 0.987676
0.987747    0.484   2.448   nan nan 0.987676

Я попробовал код ниже, но, к сожалению, он не работает!

\documentclass{article}
\usepackage{xparse}% http://ctan.org/pkg/xparse
\usepackage{csvsimple}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\usepackage{array}
\usepackage{pgfplotstable}
\newcounter{listtotal}\newcounter{listcntr}%
\NewDocumentCommand{\names}{o}{%
  \setcounter{listtotal}{0}\setcounter{listcntr}{-1}%
  \renewcommand*{\do}[1]{\stepcounter{listtotal}}%
  \expandafter\docsvlist\expandafter{\namesarray}%
  \IfNoValueTF{#1}
    {\namesarray}% \names
    {% \names[]
     \renewcommand*{\do}[1]{\stepcounter{listcntr}\ifnum\value{listcntr}=#1\relax##1\fi}%
     \expandafter\docsvlist\expandafter{\namesarray}}%
}

\begin{document} \newcommand{\namesarray}{at,br,cz,dk,fi,ie,nb,no,pt,se,be,ch,de,es,fr,it,nl,pl,ru,uk}% \foreach \i in {0,...,20}{ \newcommand{\name}{\names[\i]} \name \csvautotabular[separator=tab]{logs/log_\names[\i]} \par } \end{document}

При выполнении кода выше я получаю ошибку:


! Package csvsimple Error: File 'logs/log_\names [0]' not existent, not readable, or empty!.

Тот же пример работает при жестком кодировании символа следующим образом:


\csvautotabular[separator=tab]{logs/log_at} \par

на месте


\csvautotabular[separator=tab]{logs/log_\names[\i]} \par

Я загрузил рабочее решение путем жесткого кодирования по следующей ссылке: goo.gl/nbI5TQ
Я полагаю, что проблема в том, что макрос \i расширяется, а табличная среда не может расширить \names. Но я не уверен. Возможно ли расширить макрос \names[\i] как группу, а не только \i?
Я был бы признателен за любую минимальную помощь в решении моей проблемы.

Спасибо :)

решение1

Код кажется слишком сложным. Если вы просто хотите пройтись по списку файлов, я думаю, вам просто нужен цикл из etoolbox, скажем, и соответствующая команда из csvsimple.

Например, с logs/log_at:

accuracy        timepred        timelearn       timelearn2      timelearn4      rmsetrain                                                           
0.987747        0.532   2.44    nan     nan     0.987676                                                                                            
0.987747        0.528   2.396   nan     nan     0.987676                                                                                            
0.987747        0.544   2.408   nan     nan     0.987676                                                                                            
0.987747        0.496   2.388   nan     nan     0.987676                                                                                            
0.987747        0.436   2.432   nan     nan     0.987676                                                                                            
0.987747        0.428   2.444   nan     nan     0.987676                                                                                            
0.987747        0.464   2.452   nan     nan     0.987676                                                                                            
0.987747        0.428   2.452   nan     nan     0.987676                                                                                            
0.987747        0.464   2.46    nan     nan     0.987676                                                                                            
0.987747        0.484   2.448   nan     nan     0.987676                                                                          

и logs/log_br:

accuracy        timepred        timelearn       timelearn2      timelearn4      rmsetrain                                                           
0.987747        0.532   2.44    nan     nan     0.987676                                                                                            
0.987747        0.528   2.396   nan     nan     0.987676                                                                                            
0.987747        0.544   2.408   nan     nan     0.987676                                                                                            
0.987747        0.496   2.388   nan     nan     0.987676                                                                                            
0.987747        0.436   2.432   nan     nan     0.987676                                                                                            
0.987747        0.428   2.444   nan     nan     0.987676                                                                                            
0.987747        0.464   2.452   nan     nan     0.987676                                                                                            
0.987747        0.428   2.452   nan     nan     0.987676
0.987747        0.464   2.46    nan     nan     0.987676
0.987747        0.484   2.448   nan     nan     0.987676

Код.tex

\documentclass{article}
\usepackage{csvsimple}
\usepackage{etoolbox}
\providecommand*\do{}
\begin{document}
\renewcommand*\do[1]{%
  #1
  \csvautotabular[separator=tab]{logs/log_#1}\par
}
\docsvlist{at,br}%,cz,dk,fi,ie,nb,no,pt,se,be,ch,de,es,fr,it,nl,pl,ru,uk}%
\end{document}

выдает следующий вывод

рабочий выход

Обратите внимание, что этот код предполагает, что файлы называются logs/log_<xx>.texили что файлы имеют расширение logs/log_<xx>. Если у них другое расширение, его необходимо указать.

решение2

Быть в курсе, что

  1. \csvautotabular[separator=tab]означает, что для разделения элементов в строке CSV-файла необходимо использовать табуляции вместо пробелов.

  2. способ, которым TeX обрабатывает имена файлов, не одинаков на всех платформах.
    Например, при использовании MiKTeX 2.9 под Windows 7, TeX всегда предполагает расширение имени файла ".tex", если расширение имени файла не указано. Если у рассматриваемого имени файла вообще нет расширения, вам в любом случае нужно указать точку (без расширения).
    Например, если вы хотите указать файл "log_at" в подкаталоге "logs" текущего каталога, вам нужно написать ./logs/log_at.. (Если вы укажете ./logs/log_at(без конечной точки), (MiK)TeX будет искать файл "log_at.tex" в подкаталоге "logs" текущего каталога.

Связанный контент