Dieser Tipp erklärt in Form eines Tutorial, wie Serienbriefe mit LaTeX und der KomaScript-Klasse scrlttr2
erstellt werden. Dabei kommt ein CSV-Mitgliderexport der Vereinsverwaltung CiviCRM zum Einsatz. Zur Aufbereitung der Datei wird noch ein Python-Skript benutzt.
Der Ablauf wird sich wie folgt gestalten:
- Erstellen eines leeren Briefs
- Auslagerung der Absenderdaten und Briefformatierungen in eine lco-Datei für die spätere Verwendung in anderen Briefen
- Umwandlung der CSV-Datei in eine LaTeX-Adressenliste
- Erstellung der Anschreiben
Erstellen der Briefvorlage
Die Briefvorlage wird mit dem Briefgenerator vorbereitet. Das Ergebnis sieht so aus:
\documentclass[ footsepline, DIN, draft=false, paper=a4, fontsize=11pt, parskip=full, %Einzug (off) oder Abstand((full)|(half)[\+\*\-]?) fromphone=off, %Telefonnummer des Absenders setzen (true/false) fromfax=off, %Faxnummer des Absenders setzen (true/false) fromemail=off, %E-Mailadresse des Absenders setzen (true/false) fromurl=on, %Internetadresse des Absenders setzen (true/false) fromrule=off, %Linie bei Absender setzen (off/aftername/afteraddress) pdftex, pagenumber=false, footsepline=false]{scrlttr2} \usepackage[utf8]{inputenc} % Encoding der TeX-Dateien: utf8 \usepackage[T1]{fontenc} % Aktiviert EC-Schriftarten \usepackage{ae} % Schöne Schriften für PDF-Dateien \usepackage{textcomp} % Text-Companion-Symbols (z. B. \texteuro) \usepackage{ngerman} % Deutsche Einstellungen \usepackage{libertine} \typearea[current]{last} \usepackage{marvosym} % Symbole und das Euro-Zeichen \EUR \usepackage{eurosym} % Euro-Zeichen nach offz. Vorgaben, Geld durch \EUR{100,00} \usepackage{microtype} % Mikrotypographische Anpassungen für pdflatex \usepackage{fixltx2e} % korrigiert LaTeX-Fehler \LoadLetterOption{DIN} \begin{document} \setkomavar*{enclseparator}{Anlagen} \setkomavar{fromname}{Vereinsname} \setkomavar{fromaddress}{Straße~Hausnummer\\ % PLZ~Ort} \setkomavar{fromurl}{http://www.example.net/} \setkomavar{subject}{Rechnung für den Mitgliedsbeitrag 2011} \setkomavar{place}{Bernburg} \setkomavar{date}{01.01.2011} \renewcommand*{\raggedsignature}{} % Unterschrift wird nicht eingezogen \begin{letter}{Vorname~Nachname\\ % Straße~Hausnummer\\ % PLZ~Ort} \opening{Sehr geehrte Damen und Herren,} Brieftext \closing{Mit freundlichen Grüßen} \end{letter} \end{document}
Erstellen einer lco-Datei
Die lco-Datei vereinfacht das Erstellen weiterer Briefe, da die immer wieder verwendeten Absenderangaben und Formatierungsanweisungen in einer zentralen Datei gesammelt sind. Sie enthält prinzipiell alle LaTeX-Befehle, die Einfluss auf die Briefgestaltung nehmen und kann so aussehen:
\ProvidesFile{verein.lco}[2010/12/31 lco (Vereinsname)] \KOMAoptions{foldmarks=true,foldmarks=blmtP,fromlogo,subject=titled} \setkomavar{fromname}{Vereinsname, c/o Vorsitzender} \setkomavar{signature}{% \begin{minipage}{3cm}Vorname Name\newline{}Vorstand\end{minipage}% \begin{minipage}{3cm}Vorname Name\newline{}Schatzmeister\end{minipage}% } \renewcommand*{\raggedsignature}{\raggedright} \setkomavar{fromaddress}{Straße~Hausnummer\\ % PLZ~Ort} \setkomavar{fromphone}{0\,12\,34~56\,78} \setkomavar{fromemail}{Peter@Musterfrau.invalid} \setkomavar{fromlogo}{\includegraphics[scale=0.333]{../../hv.png}} \setkomavar{fromurl}{http://www.example.net/} \setkomavar{place}{Bernburg} \setkomavar*{enclseparator}{Anlagen} %Logo \usepackage{eso-pic} \AddToShipoutPicture{% \begingroup \setlength{\@tempdimb}{\paperwidth-4.5cm}% \setlength{\@tempdimc}{\paperheight-3.5cm}% \put(\LenToUnit{\@tempdimb},\LenToUnit{\@tempdimc}){\usekomavar{fromlogo}}% \endgroup } % Kopfzeile \firsthead{% \textsf{\large% Vereinigung der Dackelzüchter e.\,V.}% } % Fußzeile \firstfoot{% \scriptsize% \hrulefill\\[1ex]% \parbox{\textwidth}{\centering Vereinigung der Dackelzüchter e.\,V.}\\[0.5ex]% \begin{minipage}{0.22\linewidth} Zeile 1\newline Zeile 2\newline Zeile 3\newline Zeile 4 \end{minipage}\hfill% \begin{minipage}{0.22\linewidth} Zeile 1\newline Zeile 2\newline Zeile 3\newline Zeile 4 \end{minipage}\hfill% \begin{minipage}{0.22\linewidth} Zeile 1\newline Zeile 2\newline Zeile 3\newline Zeile 4 \end{minipage}\hfill% \begin{minipage}{0.22\linewidth} Zeile 1\newline Zeile 2\newline Zeile 3\newline Zeile 4 \end{minipage}% } \@addtoplength{firstfootvpos}{-2\baselineskip}
Verarbeitung der CSV-Datei
Der Export der Mitgliederanschriften erfolgte als CSV-Datei. Als Textkennzeichnung kommen doppelte Anführungszeichen zum Einsatz, die Datenfelder sind mit Komma getrennt. Das Skript liest die Datensätze ein und erstellt eine Liste von LaTeX-Befehlen, die den Brief erzeugen werden:
#!/usr/bin/env python # -*- coding: utf-8 -*- fieldindex = {} def filter(row): return row[f("Status")] == "Current" or row[f("Status")] == "Grace" def f(fieldname): return fieldindex[fieldname] def readfieldindex(row): i = 0 for field in row: fieldindex[field] = i i = i + 1 import csv addrreader = csv.reader(open('mitgliederliste2010.csv', 'rb'), delimiter=',', quotechar='"') firstline = True for row in addrreader: if firstline: readfieldindex(row) firstline = False else: if filter(row): print "\Serienbrief{%s\\\\%s\\\\%s %s}" % (row[f("Name des Kontakts")], row[f("Straße")], row[f("PLZ")], row[f("Stadt")])
Erstellung der Anschreiben
Am Ende wird der Brief erstellt, indem die lco-Datei und die Datei mit den Serienbriefkommandos gelanden werden. In der Hauptdatei existiert ein Kommando, dass den Brief mit den übergegebenen Parametern erstellt:
\documentclass[ footsepline, DIN, draft=false, paper=a4, fontsize=11pt, parskip=full, %Einzug (off) oder Abstand((full)|(half)[\+\*\-]?) fromphone=off, %Telefonnummer des Absenders setzen (true/false) fromfax=off, %Faxnummer des Absenders setzen (true/false) fromemail=off, %E-Mailadresse des Absenders setzen (true/false) fromurl=on, %Internetadresse des Absenders setzen (true/false) fromrule=off, %Linie bei Absender setzen (off/aftername/afteraddress) pdftex, pagenumber=false, footsepline=false]{scrlttr2} \usepackage[utf8]{inputenc} % Encoding der TeX-Dateien: utf8 \usepackage[T1]{fontenc} % Aktiviert EC-Schriftarten \usepackage{ae} % Schöne Schriften für PDF-Dateien \usepackage{textcomp} % Text-Companion-Symbols (z. B. \texteuro) \usepackage{ngerman} % Deutsche Einstellungen \usepackage{libertine} \typearea[current]{last} \usepackage{marvosym} % Symbole und das Euro-Zeichen \EUR \usepackage{eurosym} % Euro-Zeichen nach offz. Vorgaben, Geld durch \EUR{100,00} \usepackage{microtype} % Mikrotypographische Anpassungen für pdflatex \usepackage{fixltx2e} % korrigiert LaTeX-Fehler \LoadLetterOption{DIN} \LoadLetterOption{verein} % nicht per documentclass-Optionen geladen, damit UTF-8-Kodierung benutzt wird \begin{document} \setkomavar{subject}{Rechnung für den Mitgliedsbeitrag 2011} % Geschäftszeile \setkomavar{date}{01.01.2011} %\setkomavar{title}{} \renewcommand*{\raggedsignature}{} % Unterschrift wird nicht eingezogen \newcommand{\Serienbrief}[1]{% \begin{letter}{#1} \opening{Liebe Vereinsmitglieder,} Brieftext \closing{Petri Heil,} \end{letter} } \input{mitglieder.adr} \end{document}
Attachment | Size |
---|---|
vereinsbeispiel.lco_.txt | 1.21 KB |
csv2ltr.py_.txt | 645 bytes |
serienbrief.tex_.txt | 2.88 KB |