Como fazer com que \ifdefempty nas entradas do datatool funcione em \longtabu?

Como fazer com que \ifdefempty nas entradas do datatool funcione em \longtabu?

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 \ifdefemptyfrom 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.csvaparê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 \noalinerros misplaced \omit.

Se eu substituir longtabupor 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 \hlinesem 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

longtabu

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 \\.

informação relacionada