Tengo un archivo .csv que quiero convertir en una tabla usando el datatool
paquete. El archivo .csv está estructurado como
foo&bar&foobar
donde varias líneas están agrupadas y sólo la primera de cada grupo contiene entradas parafooybar, el resto sólo paraFoobar. Las entradas pueden contener matemáticas.
Intenté verificar la primera línea en un grupo con \ifdefempty
from etoolbox
-package e imprimir \hline
, si la entrada parabarno está vacío, pero genera un mensaje de error.
MWP
\documentclass{article}
\usepackage{etoolbox}
\usepackage{tabu}
\usepackage{longtable}
\usepackage{datatool}
\DTLloaddb[keys={foo,bar,foobar}]{mydatabase}{testbase.csv}
\newcommand{\printcommand}[2][]{%
\begin{longtabu}to\textwidth{@{}llX@{}}
\firsthline
Foo&Bar&Foobar\\
\hline\endhead
\DTLforeach*{#2}{\foo=foo,\bar=bar,\foobar=foobar}{%
% \ifdefempty{\bar}{}{\hline}%
\foo&\bar&\foobar\\
}
\end{longtabu}
}
\begin{document}
foobar
\printcommand{mydatabase}
\end{document}
Se testbase.csv
ve así
myfoo,mybar,myfoobar
17,barbar,bar 1
,,bar 234
,,barbary
23,ba ba ba,\(a^2+b^2=c^2\)
,,\emph{barfoo}
,,foofoofoo
Si compilo así, no obtengo errores, pero si descomento la línea comentada, obtengo misplaced \noalin
errores misplaced \omit
.
Si reemplazo longtabu
por tabu
(y elimino el entonces indefinido \endhead
), obtengo aún más errores.
¿Cómo puedo hacer que esto funcione como quiero?
Respuesta1
Tu error es bastante simple. Intentas colocar a \hline
sin que haya finalizado la línea anterior. Eso no funcionará (con o sin bucle). Intentar
\DTLforeach*{#2}{\foo=foo,\bar=bar,\foobar=foobar}{%
\foo&\bar&\foobar\\
\ifdefempty{\bar}{}{\hline}%
}
y verás que se compila a
Probablemente dirás que esto no es lo que quieres. Lo sé, pero su verificación no funciona para generar una línea h antes. Deberías asegurarte de que la línea anterior termine con algo como \\
.