Wie lässt sich \ifdefempty bei Datatool-Einträgen in \longtabu zum Laufen bringen?

Wie lässt sich \ifdefempty bei Datatool-Einträgen in \longtabu zum Laufen bringen?

Ich habe eine .csv-Datei, die ich mit dem -Paket in eine Tabelle umwandeln möchte datatool. Die .csv-Datei ist wie folgt aufgebaut

foo&bar&foobar

wobei mehrere Zeilen zusammengefasst sind und nur die erste Zeile einer Gruppe Einträge enthält fürfooUndBar, der Rest nur fürfoobar. Die Einträge können Mathematik enthalten.

\ifdefemptyIch habe versucht, die erste Zeile in einer Gruppe mit from -package zu überprüfen etoolboxund auszudrucken\hline , ob der Eintrag fürBarist nicht leer, führt aber zu einer Fehlermeldung.

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}

Das testbase.csvsieht so aus

myfoo,mybar,myfoobar
17,barbar,bar 1
,,bar 234
,,barbary
23,ba ba ba,\(a^2+b^2=c^2\)
,,\emph{barfoo}
,,foofoofoo

Wenn ich so kompiliere, erhalte ich keine Fehler. Wenn ich jedoch die auskommentierte Zeile entferne, erhalte ich misplaced \noalinFehler misplaced \omit.

longtabuWenn ich durch ersetze tabu(und das dann undefined entferne \endhead), erhalte ich noch mehr Fehler.

Wie kann ich das so gestalten, wie ich es möchte?

Antwort1

Dein Fehler ist ganz einfach. Du versuchst, ein zu platzieren, \hlineohne dass die vorherige Zeile beendet ist. Das funktioniert nicht (mit oder ohne Schleife). Versuche

\DTLforeach*{#2}{\foo=foo,\bar=bar,\foobar=foobar}{%
  \foo&\bar&\foobar\\
  \ifdefempty{\bar}{}{\hline}%
}

und Sie werden sehen, dass es kompiliert wird zu

Abonnieren

Wahrscheinlich werden Sie sagen, dass das nicht das ist, was Sie wollen. Ich weiß, aber Ihre Prüfung funktioniert nicht, wenn vorher eine hline ausgegeben wird. Sie müssten sicherstellen, dass die vorherige Zeile mit etwas wie endet \\.

verwandte Informationen