如何使 \longtabu 中的 datatool 条目上的 \ifdefempty 起作用?

如何使 \longtabu 中的 datatool 条目上的 \ifdefempty 起作用?

我有一个 .csv 文件,我想使用 -package 将其制作成表格datatool。.csv 文件的结构如下

foo&bar&foobar

其中多行被分组在一起,并且每组中只有第一行包含以下条目:酒吧,其余仅适用于福巴。条目可能包含数学。

\ifdefempty我尝试使用from -package检查组中的第一行etoolbox并打印出来\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(并删除未定义\endhead),我会收到更多错误。

我怎样才能让它按我想要的方式工作?

答案1

你的错误很简单。你尝试放置一个,\hline而没有结束上一行。这不会起作用(无论有没有循环)。尝试

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

你会发现它编译为

隆塔布

你可能会说这不是你想要的。我知道,但你的检查对之前输出的 hline 不起作用。你必须确保前一行以类似 的内容结尾\\

相关内容