datatool 항목의 \ifdefempty가 \longtabu에서 작동하도록 만드는 방법은 무엇입니까?

datatool 항목의 \ifdefempty가 \longtabu에서 작동하도록 만드는 방법은 무엇입니까?

-package를 사용하여 테이블로 만들고 싶은 .csv 파일이 있습니다 datatool. .csv 파일은 다음과 같이 구성되어 있지 않습니다.

푸&바&푸바

여러 줄이 함께 그룹화되고 각 그룹의 첫 번째 줄에만 항목이 포함됩니다.그리고술집, 나머지는푸바. 항목에는 수학이 포함될 수 있습니다.

\ifdefemptyfrom -package를 사용하여 그룹의 첫 번째 줄을 확인 etoolbox하고 인쇄해 보았습니다 \hline.술집비어 있지 않지만 오류 메시지가 나타납니다.

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}

외모 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로 바꾸고 tabuundefine 을 제거 하면 \endhead더 많은 오류가 발생합니다.

어떻게 하면 내가 원하는 대로 이 작업을 수행할 수 있나요?

답변1

귀하의 오류는 매우 간단합니다. \hline이전 줄을 끝내지 않고 를 배치하려고 합니다 . (루프 유무에 관계없이) 작동하지 않습니다. 노력하다

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

그러면 다음과 같이 컴파일되는 것을 볼 수 있습니다.

롱타부

아마도 당신은 이것이 당신이 원하는 것이 아니라고 말할 것입니다. 알아요. 하지만 귀하의 수표는 이전에 hline을 출력하는 데 작동하지 않습니다. 이전 줄이 다음과 같이 끝나는지 확인해야 합니다 \\.

관련 정보