Eu tenho um arquivo .csv, que quero transformar em uma tabela usando o datatool
-package. O arquivo .csv está estruturado como
foo&bar&foobar
onde várias linhas são agrupadas e apenas a primeira de cada grupo contém entradas parafooebar, o resto apenas parafoobar. As entradas podem conter matemática.
Tentei verificar a primeira linha em um grupo com \ifdefempty
from etoolbox
-package e imprimir \hline
, se a entrada parabarnão está vazio, mas isso gera uma mensagem de erro.
PMW
\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}
A testbase.csv
aparência é esta
myfoo,mybar,myfoobar
17,barbar,bar 1
,,bar 234
,,barbary
23,ba ba ba,\(a^2+b^2=c^2\)
,,\emph{barfoo}
,,foofoofoo
Se eu compilar assim, não recebo erros, mas se descomentar a linha comentada, recebo misplaced \noalin
erros misplaced \omit
.
Se eu substituir longtabu
por tabu
(e remover então undefined \endhead
), recebo ainda mais erros.
Como posso fazer isso funcionar do jeito que eu quero?
Responder1
Seu erro é bem simples. Você tenta colocar um \hline
sem terminar a linha anterior. Isso não funcionará (com ou sem loop). Tentar
\DTLforeach*{#2}{\foo=foo,\bar=bar,\foobar=foobar}{%
\foo&\bar&\foobar\\
\ifdefempty{\bar}{}{\hline}%
}
e você verá que ele compila para
Provavelmente você dirá que não é isso que você quer. Eu sei, mas sua verificação não funciona para gerar um hline antes. Você teria que garantir que a linha anterior terminasse com algo como \\
.