다음 파일을 컴파일하려고 하면 다음 오류가 발생합니다.
! Misplaced \noalign.
\pagebreak ->\noalign
{\ifnum `}=0\fi \@testopt {\LT@no@pgbk -}4
l.47 \end{letter}
왜 그런지 이해가 안 돼요. csv 파일을 약간 변경하면 xx.csv
이 오류가 사라집니다. 예를 들어 mm
로 변경합니다 m
. 또는 mm
로 변경하십시오 11
.
또는 문자열 끝에 쉼표를 추가합니다 2014.02.26,26,2014.11.12.tm
.
\PrintDocTableParekh[2014.02.26,26,2014.11.12.tm]{newbDB}{Documents}
따라서 이를 2014.02.26,26,2014.11.12.tm,
다음으로 변경하면 오류가 사라집니다.
\documentclass[12pt]{letter}
\usepackage{longtable}
\usepackage[verbose]{datatool}
\usepackage{array}
\usepackage{url}
\newcounter{tabenum}\setcounter{tabenum}{0}
\newcommand{\colhead}[1]{\multicolumn{1}{>{\bfseries}l}{#1}}
\newcommand{\nextnuml}[1]{\refstepcounter{tabenum}\thetabenum.\label{#1}}
\newcommand*{\checkmissing}[1]{\DTLifnull{#1}{}{#1}}
\signature{Someone}
\newcommand{\PrintDocTableParekh}[3][]{%
% #1 = list of rowIDs
% #2 = database to search
% #3 =caption
\begin{longtable}{r l p{1.5in} c c p{2.5in}}
\caption{#3}\\
& \colhead{Date} & \colhead{Filename} & \colhead{From} & \colhead{To} & \colhead{Subject}\\\hline\endhead
\DTLforeach
[\ifblank{#1}{\boolean{true}}{\DTLisSubString{#1}{\RowID}}]
{#2}{%
\RowID=RowID,%
\Date=Date,%
\Filename=Filename,%
\From=From,%
\To=To,%
\Subject=Subject%
}{%
\nextnuml{\RowID} & \Date & {\bfseries\expandafter\url\expandafter{\Filename} } & \checkmissing{\From} & \checkmissing{\To} & \Subject \\
}%
\end{longtable}
}%
\begin{filecontents*}{xx.csv}
2014.02.26, 26 Feb 2014 , something.txt , , , ,subject
2014.11.12.tm, 12 Nov 2014 , something.txt , XXX , YY , , subject
mm, date, ,,,, subject
\end{filecontents*}
\begin{document}
\begin{letter}{}
\opening{xx,}
\closing{Yours Sincerely,}
\DTLloaddb[noheader,keys={RowID,Date,Filename,From,To,Email,Subject}]{newbDB}{xx.csv}
\PrintDocTableParekh[2014.02.26,26,2014.11.12.tm]{newbDB}{Documents}
\end{letter}
\end{document}
답변1
\DTLifSubString
내에서 사용시 문제가 있는 것 같습니다 \DTLforeach
. (여기 \DTLisSubString
에는 조건부 인수의 using이 포함됩니다.) letter
and 의 사용은 longtable
난독화 문제이므로 다음은 간략한 버전입니다.
\documentclass{article}
\usepackage{datatool}
\begin{filecontents*}{xx.csv}
2014.02.26
2014.11.12.tm
mm
\end{filecontents*}
\newcommand*{\ifcontainsrowid}[2]{%
\ifblank{#1}{#2}%
{%
\DTLifSubString{#1}{\RowID}{#2}{}%
}%
}
\begin{document}
\DTLloaddb[noheader,keys={RowID}]{newbDB}{xx.csv}
\DTLforeach*{newbDB}{\RowID=RowID}%
{%
\ifcontainsrowid{2014.02.26,26,2014.11.12.tm}%
{%
\RowID
}
}%
\end{document}
이로 인해 다른 오류 메시지가 발생합니다.
Runaway argument?
\expandafter \dtl@ifsingle \expandafter {\dtl@first }{\expandafter \@dtl@testif
substring \ETC.
! Paragraph ended before \dtl@getfirst was complete.
<to be read again>
\par
그러나 그것은 같은 문제에서 비롯됩니다. 아직 원인을 파악하지 못했지만 일주일 동안 집을 비웠고 상황을 따라잡아야 하기 때문에 아직 조사할 기회가 많지 않았습니다. 예를 들어 패키지 \IfSubStr
에서 다른 명령을 사용하여 이 문제를 해결할 수 있습니다 xstring
.
\documentclass{article}
\usepackage{datatool}
\usepackage{xstring}
\begin{filecontents*}{xx.csv}
2014.02.26
2014.11.12.tm
mm
\end{filecontents*}
\newcommand*{\ifcontainsrowid}[2]{%
\ifblank{#1}{#2}%
{%
%\DTLifSubString{#1}{\RowID}{#2}{}%
\IfSubStr{#1}{\RowID}{#2}{}%
}%
}
\begin{document}
\DTLloaddb[noheader,keys={RowID}]{newbDB}{xx.csv}
\DTLforeach*{newbDB}{\RowID=RowID}%
{%
\ifcontainsrowid{2014.02.26,26,2014.11.12.tm}%
{%
\RowID
}
}%
\end{document}
업데이트: 이 버그는 v2.23에서 수정되었습니다.