Al intentar compilar el siguiente archivo se produce el siguiente error:
! Misplaced \noalign.
\pagebreak ->\noalign
{\ifnum `}=0\fi \@testopt {\LT@no@pgbk -}4
l.47 \end{letter}
No entiendo por qué. Realizar cambios menores en el archivo csv xx.csv
hace que este error desaparezca. Por ejemplo, cambie mm
a m
. Alternativamente, cambie mm
a 11
.
Alternativamente, agregar una coma al final de la cadena 2014.02.26,26,2014.11.12.tm
en
\PrintDocTableParekh[2014.02.26,26,2014.11.12.tm]{newbDB}{Documents}
por lo tanto, cambiarlo a 2014.02.26,26,2014.11.12.tm,
también hace que el error desaparezca.
\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}
Respuesta1
Parece haber un problema \DTLifSubString
cuando se usa dentro de \DTLforeach
. (Esto incluye el uso \DTLisSubString
en el argumento condicional). El uso de letter
y longtable
confunde las cosas, por lo que aquí hay una versión recortada:
\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}
Esto provoca un mensaje de error diferente:
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
Pero surge del mismo problema. Aún no he descubierto qué lo está causando, pero he estado fuera durante una semana y necesito ponerme al día con las cosas, así que no he tenido mucha oportunidad de investigar todavía. Puedes solucionarlo usando un comando diferente, por ejemplo \IfSubStr
del xstring
paquete:
\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}
Actualización: este error se solucionó en v2.23.