datatool 패키지의 클래스 lettre에 오류가 있습니다.

datatool 패키지의 클래스 lettre에 오류가 있습니다.

자동으로 5글자를 쓰고 싶습니다 \documentclass[10pt]{lettre}. 다음과 같은 모든 수신자 정보가 포함된 CSV 파일이 있습니다 mail_bd2.csv.

Titre,Apostrophe,Prenom,Nom,Organisme,Rue,Ville
Monsieur,Cher,machin, truc, lala,13 rue du Four, 15478 LALA

.tex문서는 다음과 같습니다

\documentclass[10pt]{lettre}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}


\usepackage{datatool}

% Adjust margins for aesthetics
\addtolength{\voffset}{4cm}


\makeatletter
\newcommand*{\NoRule}{\renewcommand*{\rule@length}{0}}
\makeatother

\date{\today} % Date of the letter

\begin{document}

\DTLloaddb{adresses}{mail_bd2.csv} 
% Initialisation des variables à utiliser par champ
\DTLforeach{adresses}{
  \titre=Titre,
  \apo=Apostrophe,
  \prenom=Prenom,
  \nom=Nom,
  \org=Organisme,
  \rue=Rue,
  \ville=Ville,
  %\mail=Email
}{


\begin{letter}{\titre{} \prenom{} \textsc{\nom}\\
               \org\\
               \rue\\
               \textsc{\ville}}
\NoRule


\opening{\apo{} \prenom{},}

blablablabalbalbab

\closing{Veuillez agréer, \MakeLowercase{\apo{}} \prenom{}, l'expression de mes
sentiments les meilleurs.}

\end{lettre}
}
\end{document}

그것은 5개의 편지 중 3개에서 작동하며 파일의 오류를 이해할 수 없습니다 log.

l.66 }

Your command was ignored.
Type  I <command> <return>  to replace it with another command,
or  <return>  to continue without it.

! Too many }'s.
<argument> ...db@row@elt@end@ }{\@dtl@after }\fi }
                                                  {}\csname @dtl@endhook@\th...
l.66 }

You've closed more groups than you opened.
Such booboos are generally harmless, so keep going.

! Extra \else.
\@iwhilesw ...i ->#1\expandafter \@iwhilesw \else 
                                                  \@gobbletwo \fi {#1}\fi 
l.66 }

I'm ignoring this; it doesn't match any \if.

! Extra \else.
\@iwhilesw ...i ->#1\expandafter \@iwhilesw \else 
                                                  \@gobbletwo \fi {#1}\fi 
l.66 }

I'm ignoring this; it doesn't match any \if.

Runaway argument?
\@nil \@@ {adresses}\fi \ifthenelse {\boolean {true}}{\refstepcounter \ETC.
! Paragraph ended before \@dtl@next was complete.
<to be read again> 
                   \par 
l.66 }

I suspect you've forgotten a `}', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.


Class lettre Message: Lettre 3.

[1

] (/usr/local/texlive/2014/texmf-dist/tex/latex/lettre/default.ins

Class lettre Message: Adresse precisee.


Class lettre Message: Numero de telephone precise.


Class lettre Message: Numero de fax precise.


Class lettre Message: Lieu precise.

)

Class lettre Message: Adresse precisee.


Class lettre Message: Numero de telephone precise.


Class lettre Message: Numero de fax supprime.


Class lettre Message: Numero d'E-Mail precise.


Class lettre Message: Lieu precise.


Class lettre Message: Signature simple.


! LaTeX Error: \begin{letter} on input line 66 ended by \end{lettre}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.66 }

Your command was ignored.
Type  I <command> <return>  to replace it with another command,
or  <return>  to continue without it.

! Too many }'s.
\@iwhilesw ...@iwhilesw \else \@gobbletwo \fi {#1}
                                                  \fi 
l.66 }

You've closed more groups than you opened.
Such booboos are generally harmless, so keep going.


Class lettre Message: Nombre de lettres :3.


Class lettre Message: Nombre de telefax :0.

[2

] (./test_lettre.aux) )
(\end occurred when \ifnum on line 66 was incomplete)
(\end occurred when \ifnum on line 66 was incomplete)
(\end occurred when \ifnum on line 66 was incomplete) 
Here is how much of TeX's memory you used:
 5938 strings out of 493108
 78082 string characters out of 6134853
 189754 words of memory out of 5000000
 9273 multiletter control sequences out of 15000+600000
 6529 words of font info for 20 fonts, out of 8000000 for 9000
 1141 hyphenation exceptions out of 8191
 46i,7n,38p,798b,439s stack positions out of 5000i,500n,10000p,200000b,80000s
{/usr/local/texlive/2014/t
exmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc}</usr/local/texlive/2014/tex
mf-dist/fonts/type1/public/cm-super/sfcc1000.pfb></usr/local/texlive/2014/texmf
-dist/fonts/type1/public/cm-super/sfrm1000.pfb></usr/local/texlive/2014/texmf-d
ist/fonts/type1/public/cm-super/sfti1000.pfb></usr/local/texlive/2014/texmf-dis
t/fonts/type1/public/cm-super/sftt1000.pfb>
Output written on test_lettre.pdf (3 pages, 81465 bytes).
PDF statistics:
 31 PDF objects out of 1000 (max. 8388607)
 21 compressed objects within 1 object stream
 0 named destinations out of 1000 (max. 500000)
 1 words of extra memory for PDF output out of 10000 (max. 10000000)

누군가 도와줄 수 있나요?

답변1

세 가지 문제가 있습니다.

  1. 정의된 것이 없습니다 \fromname.
  2. 로 시작하고 \begin{letter};로 끝납니다 \end{lettre}.
  3. 이메일 주소를 제외하므로 에 대해 지정된 필드 목록에서 마지막 쉼표를 제거해야 합니다. \DTLforeach{<db>}{<list>}{..}그렇지 않으면 datatool뭔가가 예상됩니다. 그리고 그 내용은 비워 둘 수 없습니다.

따라서 문서는 다음과 같아야 합니다.

\documentclass[10pt]{lettre}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}

\usepackage{datatool}

% Adjust margins for aesthetics
\addtolength{\voffset}{4cm}

\makeatletter
\newcommand*{\NoRule}{\renewcommand*{\rule@length}{0}}
\makeatother

\date{\today} % Date of the letter

\begin{document}

\newcommand*\fromname{Someone Special}

\DTLloaddb{adresses}{mail_bd2.csv} 
% Initialisation des variables à utiliser par champ
\DTLforeach{adresses}{
  \titre=Titre,
  \apo=Apostrophe,
  \prenom=Prenom,
  \nom=Nom,
  \org=Organisme,
  \rue=Rue,
  \ville=Ville%,
  %\mail=Email
}{
  \begin{letter}{\titre{} \prenom{} \textsc{\nom}\\
                 \org\\
                 \rue\\
                 \textsc{\ville}}
    \NoRule

    \opening{\apo{} \prenom{},}

    blablablabalbalbab

    \closing{Veuillez agréer, \MakeLowercase{\apo{}} \prenom{}, l'expression de mes
    sentiments les meilleurs.}

  \end{letter}
}
\end{document}

사용하지 않을 경우 문자는 다음과 같아야 합니다.datatool(시각적으로만):

여기에 이미지 설명을 입력하세요

여기에 동일한 문서가 복제되어 있습니다.없이클래스 lettre를 사용하지만 article대신 기본값을 사용합니다(및 datatool).

여기에 이미지 설명을 입력하세요

\documentclass[10pt]{article}

\usepackage{filecontents}
\begin{filecontents*}{mail_bd2.csv}
Titre,Apostrophe,Prenom,Nom,Organisme,Rue,Ville
Monsieur,Cher,machin, truc, lala,13 rue du Four, 15478 LALA
\end{filecontents*}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}

\usepackage{datatool}

% Adjust margins for aesthetics
\usepackage{geometry}
\geometry{%
  margin=1.875in,
  top=3in
}

\setlength{\parindent}{0pt}% No paragraph indent
\begin{document}

\newcommand*\fromname{Someone Special}

\DTLloaddb{adresses}{mail_bd2.csv} 
% Initialisation des variables à utiliser par champ
\DTLforeach{adresses}{
  \titre=Titre,
  \apo=Apostrophe,
  \prenom=Prenom,
  \nom=Nom,
  \org=Organisme,
  \rue=Rue,
  \ville=Ville%
}{
  \clearpage\thispagestyle{empty}%
  \hspace*{-1.25in}%
  \begin{tabular}[t]{@{}l}
    B.I.D.O.N \\
    Rue Des Mots \\
    80886 Sassonne-le-Creux \\[\normalbaselineskip]
    Tél.: 987.64.20 \\
    Fax.: 987.75.31
  \end{tabular}
  \hfill
  \begin{tabular}[t]{l@{}}
    Sassonne-le-Creux, \today
  \end{tabular}

  \bigskip

  \mbox{}\hfill
  \begin{tabular}{l@{}}
    \phantom{Sassonne-le-Creux, \today} \\[-\normalbaselineskip]
    \titre{} \prenom{} \textsc{\nom} \\
    \org \\
    \rue \\
    \textsc{\ville}
  \end{tabular}

  \vspace{2in}

  \apo{} \prenom{},

  \medskip

  blablablabalbalbab

  \bigskip\bigskip

  Veuillez agréer, \MakeLowercase{\apo{}} \prenom{}, l'expression de mes sentiments les meilleurs.

  \vspace{1.25in}

  \hfill
  \fromname
}
\end{document}

lettre다소 어색한 인터페이스가 필요하지 않은 것을 사용하여 동작을 복제하는 것은 매우 간단합니다 (제 생각에는).

답변2

\documentclass[10pt]{lettre}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}

\usepackage{datatool}

% Adjust margins for aesthetics
\addtolength{\voffset}{4cm}


\makeatletter
\newcommand*{\NoRule}{\renewcommand*{\rule@length}{0}}
\makeatother

\date{\today} % Date of the letter
\providecommand{\mclosing}[1]{
\protect #1
}
\begin{document}
\DTLsetseparator{,}
% \DTLloadrawdb{adresses}{mail-bd2.csv} 
\DTLloadrawdb[keys={Titre,Apostrophe,Prenom,Nom,Organisme,Rue,Ville}]{adresses}{mail-bd2.csv} %took more robost loaddb
\DTLforeach{adresses}{\Titre=Titre,\Apostrophe=Apostrophe,\Prenom=Prenom,\Nom=Nom,\Organisme=Organisme,\Rue=Rue,\Ville=Ville}
        {%
\begin{letter}{\Titre \Prenom \textsc{\Nom}\\ %Some spellingerrors
               \Organisme \\
               \Rue\\
               \textsc{\Ville}}    
\NoRule
\opening{\Apostrophe \Prenom,}
blablablabalbalbab
% \closing{Veuillez agréer, \MakeLowercase{\Apostrophe} \Prenom, l'expression de messentiments les meilleurs.} % here is the problem
\mclosing{Veuillez agréer, \MakeLowercase{\Apostrophe} \Prenom, l'expression de messentiments les meilleurs.}
\end{letter} \newpage  %Some spellingerrors
        }%
\end{document}

문제는 \closing 명령입니다. 이유는 모르겠습니다. 이것은 해결 방법이고 나쁜 것입니다 ...

관련 정보