
У меня есть много разделенных табуляцией 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
Быть в курсе, что
\csvautotabular[separator=tab]
означает, что для разделения элементов в строке CSV-файла необходимо использовать табуляции вместо пробелов.способ, которым TeX обрабатывает имена файлов, не одинаков на всех платформах.
Например, при использовании MiKTeX 2.9 под Windows 7, TeX всегда предполагает расширение имени файла ".tex", если расширение имени файла не указано. Если у рассматриваемого имени файла вообще нет расширения, вам в любом случае нужно указать точку (без расширения).
Например, если вы хотите указать файл "log_at" в подкаталоге "logs" текущего каталога, вам нужно написать./logs/log_at.
. (Если вы укажете./logs/log_at
(без конечной точки), (MiK)TeX будет искать файл "log_at.tex" в подкаталоге "logs" текущего каталога.