
Tengo muchos archivos csv separados por tabulaciones que me gustaría convertir en tablas automáticamente en un entorno tabular de látex. Las tablas se nombran:registro_%donde % puede ser uno de los símbolos \in {at,be,fr,....}. Por ejemplo, cada archivo se ve así:
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
¡Probé el siguiente código que desafortunadamente no funciona!
Al ejecutar el código anterior aparece un error:\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!.
El mismo ejemplo funciona codificando el símbolo de la siguiente manera:
\csvautotabular[separator=tab]{logs/log_at} \par
en lugar de
\csvautotabular[separator=tab]{logs/log_\names[\i]} \par
Cargué la solución funcional codificando en el siguiente enlace: goo.gl/nbI5TQ.
Creo que el problema es que la macro \i se expande y el entorno tabular no logra expandir \names. Pero no estoy seguro. ¿Es posible expandir la macro \names[\i] como un grupo y no solo \i?
Agradecería cualquier tipo de ayuda mínima para solucionar mi problema.
Gracias :)
Respuesta1
El código parece demasiado complejo. Si solo desea recorrer la lista de archivos, creo que solo necesita un bucle desde etoolbox
, por ejemplo, y el comando relevante desde csvsimple
.
Por ejemplo con 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
y 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
El .tex
código
\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}
produce la siguiente salida
Tenga en cuenta que este código supone que los archivos se llaman logs/log_<xx>.tex
o que los archivos son logs/log_<xx>
. Si tienen una extensión diferente, debes especificarla.
Respuesta2
Sé consciente de
\csvautotabular[separator=tab]
significa que debe usar tabulaciones en lugar de espacios para separar elementos dentro de una línea del archivo csv.La forma en que TeX procesa los nombres de archivos no es la misma en todas las plataformas.
Por ejemplo, cuando se utiliza MiKTeX 2.9 en Windows 7, TeX siempre asume la extensión del nombre de archivo ".tex" si no se proporciona ninguna extensión de nombre de archivo. Si el nombre de archivo en cuestión no tiene ninguna extensión, deberá proporcionar el punto (sin extensión) de todos modos.
Por ejemplo, si desea especificar el archivo "log_at" en el subdirectorio "logs" del directorio actual, debe escribir./logs/log_at.
. (Si especifica./logs/log_at
(sin punto final), (MiK)TeX buscará el archivo "log_at.tex" en el subdirectorio "logs" del directorio actual.