У меня есть .csv-файл, который я хочу превратить в таблицу с помощью datatool
-package. .csv-файл имеет следующую структуру
фу&бар&фубар
где несколько строк сгруппированы вместе и только первая в каждой группе содержит записи дляфуибар, остальное только дляфубар. Записи могут содержать математические выражения.
Я попытался проверить первую строку в группе с помощью \ifdefempty
from etoolbox
-package и распечатать \hline
, если запись длябарне пусто, но это приводит к сообщению об ошибке.
МРП
\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}
Выглядит testbase.csv
так
myfoo,mybar,myfoobar
17,barbar,bar 1
,,bar 234
,,barbary
23,ba ba ba,\(a^2+b^2=c^2\)
,,\emph{barfoo}
,,foofoofoo
Если я скомпилирую таким образом, то не получу никаких ошибок, но если я раскомментирую закомментированную строку, то получу misplaced \noalin
ошибки misplaced \omit
.
Если я заменю longtabu
на tabu
(и уберу then undefined \endhead
), я получу еще больше ошибок.
Как мне сделать так, чтобы это работало так, как я хочу?
решение1
Ваша ошибка довольно проста. Вы пытаетесь разместить a, \hline
не закончив предыдущую строку. Это не сработает (с циклом или без него). Попробуйте
\DTLforeach*{#2}{\foo=foo,\bar=bar,\foobar=foobar}{%
\foo&\bar&\foobar\\
\ifdefempty{\bar}{}{\hline}%
}
и вы увидите, что он компилируется в
Вероятно, вы скажете, что это не то, что вам нужно. Я знаю, но ваша проверка не работает для вывода hline до этого. Вам нужно будет убедиться, что предыдущая строка заканчивается чем-то вроде \\
.