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 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 |