如何使 datatool 條目上的 \ifdefempty 在 \longtabu 中運作?

如何使 datatool 條目上的 \ifdefempty 在 \longtabu 中運作?

我有一個 .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

如果我替換longtabutabu(並刪除然後未定義的\endhead),我會收到更多錯誤。

我怎樣才能讓這份工作按照我想要的方式進行?

答案1

你的錯誤很簡單。您嘗試\hline在不結束前一行的情況下放置 a 。那是行不通的(有或沒有循環)。嘗試

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

你會看到它編譯為

隆塔布

也許你會說這不是你想要的。我知道,但是你的檢查對於之前輸出 hline 不起作用。您必須確保前一行以類似\\.

相關內容