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.
\ifdefempty
Ich habe versucht, die erste Zeile in einer Gruppe mit from -package zu überprüfen etoolbox
und 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.csv
sieht 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 \noalin
Fehler misplaced \omit
.
longtabu
Wenn 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, \hline
ohne 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
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 \\
.