\longtabu でデータツールエントリの \ifdefempty を機能させるにはどうすればよいですか?

\longtabu でデータツールエントリの \ifdefempty を機能させるにはどうすればよいですか?

.csvファイルがあり、これをdatatoolパッケージを使用してテーブルにしたいです。.csvファイルは次のような構造になっています。

フー&バー&フーバー

複数の行がグループ化されており、各グループの最初の行にのみエントリが含まれています。フーそしてバー、残りはフーバーエントリには数学的内容が含まれる場合があります。

\ifdefemptyfrom etoolbox-packageでグループの最初の行をチェックして印刷してみました\hline、出力してみましたが、バー空ではありませんが、エラー メッセージが表示されます。

MWPS

\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

\hlineあなたのエラーは非常に単純です。前の行を終了せずに を配置しようとしています。これは機能しません(ループの有無にかかわらず)。試してみてください

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

そしてコンパイルすると

ロンタブ

おそらく、これは望んでいることではないと言うでしょう。わかっていますが、あなたのチェックは、前の hline の出力には機能しません。前の行が のような文字列で終わるようにする必要があります\\

関連情報