![Scrlttr2 和 datatool 兼容性?](https://linux22.com/image/314485/Scrlttr2%20%E5%92%8C%20datatool%20%E5%85%BC%E5%AE%B9%E6%80%A7%EF%BC%9F.png)
我对写一些格式信函很感兴趣。我非常喜欢 scrletter2 的功能,尤其是它可以将“收件人”地址放在商务信封的正确位置。
对于邮件合并,我过去曾使用过 datatools 包。它与 article 类结合使用非常简单。MWE 可能看起来像
\documentclass{letter}
\usepackage{datatool}
\begin{document}
% load database
\DTLloaddb{scores}{StudentScores.csv}
\DTLforeach{scores}{\firstname=FirstName,\surname=Surname,\score=Score}{%
\begin{letter}{}
\opening{Dear \firstname\ \surname}
Congratulations on your score of \score !
\closing{Yours Sincerely}
\end{letter}
}
\end{document}
然而,使用 scrletter2 时,事情变得棘手。具体来说,我很难弄清楚如何放置命令。
我不知道如何发布不太长的 MWE,但要点如下:
\documentclass[11pt,english]{scrlttr2}
\usepackage{datatool}
\begin{document}
% a bunch of \setkomavar{fromname}{From name} and similar
\DTLloaddb{info}{Book1.csv}
% read database
\DTLforeach{info}{\firstname=FirstName,
\surname=LastName,
\position=Position,}{%
\begin{letter}{\firstname}
Text here
\end{letter}
}
\end{document}
我收到以下错误:
Runaway argument?
\@nil \@@ {scores}\fi \ifthenelse {\boolean {true}}{\refstepcounter {\ETC.
Paragraph ended before \@dtl@next was complete.
<to be read again>
\par
l.130 }
我觉得文档中 \DTL 命令的位置有问题,但又无法弄清楚。
答案1
您必须letter
用命令\DTLforeach
或DTLenvforeach
环境将环境括起来。但您必须准确使用分配列表:键前后不应有额外的空格,分配列表末尾不应有逗号。
与环境一起编码DTLenvforeach
:
\begin{filecontents*}{test.csv}
FirstName,LastName,Score
John,"Smith, Jr",68
Jane,Brown,75
Andy,Brown,42
Z\"oe,Adams,52
Roger,Brady,58
Clare,Verdon,45
\end{filecontents*}
\documentclass[
english,
fromalign=right
]{scrlttr2}
\usepackage{babel}
\usepackage{datatool}
\begin{document}
\setkomavar{fromname}{Sydney Summer}
\setkomavar{fromaddress}{Entenstr. 5\\99999 Katzenhausen}
\DTLloaddb{info}{test.csv}
\begin{DTLenvforeach}{info}{\firstname=FirstName,\surname=LastName,\score=Score}
\begin{letter}{\firstname{} \surname}
\opening{Dear \firstname,}
Congratulations on your score of \score !
\closing{Yours sincerely}
\end{letter}
\end{DTLenvforeach}
\end{document}
或者使用以下命令\DTLforeach
:
\documentclass[
english,
fromalign=right
]{scrlttr2}
\usepackage{babel}
\usepackage{datatool}
\begin{document}
\setkomavar{fromname}{Sydney Summer}
\setkomavar{fromaddress}{Entenstr. 5\\99999 Katzenhausen}
\DTLloaddb{info}{test.csv}
\DTLforeach{info}{\firstname=FirstName,\surname=LastName,\score=Score}{
\begin{letter}{\firstname{} \surname}
\opening{Dear \firstname,}
Congratulations on your score of \score !
\closing{Yours sincerely}
\end{letter}
}
\end{document}