Mastodon Skip to content

Serienbriefe mit KOMA-Script und datatool.

Ein Schulverwaltungszweck hatte mir die Aufgabe beschert, einen Serienbrief an Kolleg*innen zu versenden. Ästhetische Gründe sprachen (wie immer) für die Verwendung von LaTeX. Früher hatte ich für eine ähnliche Aufgabe Nicola Talbots csvtools verwendet; da dies als durch data­tool von derselben Autorin ersetzt gekennzeichnet ist (und außerdem keine Bedingungen à la if … then … kennt), wollte ich letzteres ausprobieren.

Leider wurde stets nur ein einziger Brief statt derer viele erzeugt. Einige Stunden habe ich am Wochenende mit der Suche nach dem Fehler verbracht, hatte wahlweise Excels csv-Export, seine Zeichensatzkonvertierung (wer weiß, was Excel unter UTF-8 versteht) oder die Zeilenendendeklaration in Verdacht (CR? LF? CRLF?). Schließlich habe ich aus purer, tief empfundener Verzweiflung doch nochmal Word angeschmissen und das Ganze dort nachgebaut.

Als das dann lief, konnte ich in Ruhe weiterforschen – getrieben vom für Word/Excel akzeptablen, an TeX-Standards gemessen aber ungenügenden Ergebnis. Den entscheidenden Hinweis (nach vielen weiteren nicht zielführenden) gab mir dann dieser Eintrag auf Stack Exchange: hier wurde ich auf die Umgebung DTLenvforeach (statt DTLforeach) hingewiesen, die in korrekter Verschachtelung mit der letter-Umgebung aus KOMAscript dann so aussieht:

[…]

\usepackage{datatool}
\DTLsetseparator{;}
\DTLloaddb[noheader=false]{adressen}{dbname.csv}


\begin{document}

\begin{DTLenvforeach}{adressen}
{\Name=Name,%
\Vorname=Vorname,%
\Geschlecht=Geschlecht,%
\EMail=EMail,%
\Passwort=Passwort}

[…]


{\begin{letter}{\Vorname\ \Name}
\enlargethispage{4cm}
\opening{\ifstr{\Geschlecht}{w}{Liebe \Vorname,}{Lieber \Vorname,}}

[…]

\closing{\leftline{Mit freundlichem Gruß –}}
\end{letter}}
\end{DTLenvforeach}

[…]


Und schon ist alles wieder schön.