AA_parakeet_alitaylor_sxc_1100104.jpg

© Alitaylor, sxc.hu

Angefüttert

LaTeX mit Daten aus externen Quellen anreichern

15.04.2013
Ob Serienbrief oder Teilnehmerliste – mit dem richtigen Adapter befüllen Sie LaTeX-Dokumente problemlos mit den Feldinhalten einer Datenbank und erstellen so Druckerzeugnisse in perfekter Qualität.

Strukturierte Datensätze wie Adressen und Produktinformationen liegen in der Regel in Datenbanken. Zum Verarbeiten liest eine Applikation die Datensätze zunächst aus und setzt danach beispielsweise die Inhalte der einzelnen Felder an die jeweilige Position in einem Textbaustein ein. So entstehen Serienbriefe, Terminpläne, Namensschilder, Teilnehmerlisten und Veranstaltungsprogramme.

Zum Anbinden des Textsatzsystems LaTeX an eine Datenbank liegt nur vergleichsweise wenig Dokumentation vor. Häufig gerät sie erst bei einer intensiven Suche ins Blickfeld. Dabei stehen zwei gegensätzliche Verfahren und damit verbundene Vorgehensweisen zur Wahl.

Die erste Variante greift ausschließlich auf Bordmittel von LaTeX zurück und platziert die gesamte Logik zum Zugriff auf die Datenbank in der LaTeX-Datei. Bei der zweiten Variante kommt zusätzlich eine Programmiersprache wie Perl oder Python zum Einsatz. Mit dieser holen Sie die Daten und erzeugen im nächsten Schritt daraus ein LaTeX-Dokument.

Beiden Wegen gemeinsam ist der abschließende Schritt des Übersetzens des LaTeX-Codes ins gewünschte Format, sei es nun Postscript mittels latex und dvips oder PDF mittels pdflatex.

Den Ausgangspunkt für diesen Artikel bilden die drei Pakete Textmerg [1], Csvtools [2] und LaTeXDB [3]. Bei Debian und dessen Derivaten gehören Textmerg und Csvtools zum Paket texlive-latex-extra. LaTeXDB gibt es derzeit nur im CTAN [4], nicht als fertiges DEB- oder RPM-Paket. Alle Pakete binden Sie über das Kommando \usepackage{Paket} in der Präambel des Dokuments ein.

Textmerg

Textmerg ermöglicht das Einlesen von Datensätzen aus einer Textdatei. Dabei erstreckt sich ein vollständiger Datensatz über mehrere Textzeilen hinweg, jedes Feld des Datensatzes liegt in einer einzelnen Zeile. Zum Verarbeiten benötigt LaTeX noch Information zur Struktur der Textdatei und den einzelnen Feldern der Datensätze. Diesen Aufbau beschreiben Sie mit dem Kommando \Fields{Feldbezeichner}. Für drei Felder eines Beispielanschreibens kommt folgender Eintrag zum Einsatz:

\Fields{\Vorname\Name\Funktion}

LaTeX leitet daraus drei Variablen \Name, \Vorname und \Funktion ab. Bei der Wahl der Bezeichner haben Sie zwar freie Hand, sollten aber darauf achten, Kollisionen mit bestehenden Kommandos zu vermeiden.

Die Variablen dürfen Sie an beliebiger Stelle im Dokument platzieren. Noch sind sie jedoch leer – um sie mit sinnvollen Inhalten zu befüllen, teilen Sie LaTeX mit, in welcher Datei diese liegen. Dazu nutzen Sie zusätzlich das Kommando \Merge{Datei}. In Listing 1 heißt die Datei empfaengerliste.

Listing 1

...
\Fields{\Vorname\Name\Funktion}
...
\Merge{empfaengerliste}{%
An
\Vorname \Name \\
\Funktion \\
}
...

Sobald Sie das Dokument übersetzen, öffnet LaTeX in Zeile 4 die Datei empfaengerliste und befüllt bei jedem Durchlauf die Zeilen 6 und 7 entsprechend. Dabei arbeitet die Software die Datei mit den Datensätzen bis zum Ende durch. Alle Einträge landen in einem Dokument.

Listing 2 zeigt ein vollständiges Beispiel, eine Liste mit Besuchern für ein Konzert in der Stadt Stenkelfeld [5]. Jeder der fünf Einträge besteht aus dem Vornamen, dem Namen und der Funktion der Person aus der bekannten norddeutschen Hörspielserie. Abbildung 1 zeigt das Ergebnis nach dem Übersetzen des LaTeX-Codes aus Listing 3 mit Pdflatex.

Abbildung 1: Bei Bedarf generieren Sie mit LaTeX eine Teilnehmerliste für eine Veranstaltung aus den Daten einer Textdatei.

Listing 2

Friedhelm
Pötter
Leiter der Jürgen-Koppelin-Bildungsstätte
Dr. Walter
Broermeyer
Wim-Thoelke-Universität Stenkelfeld
Friedemann
von Klöhnen
Geriatriedekan, Heimleiter des Seniorenstifts am Höcklager Industrieweg
Helmut
Sönkel-Pörthagen
Geschäftsführer der Großküche Stenkelfeld
Dr. Bernwart
Ölvermöhlen
Direktor der Volksgenossenbank von 1936

Listing 3

\documentclass[10pt]{article}
\usepackage{german}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{palatino}
\usepackage{textmerg}
\begin{document}
\Fields{\Vorname\Name\Funktion}
\begin{center}
\huge{Teilnehmerliste zum Neujahrskonzert im Gasthof Knollmeyer}
\end{center}
~\\
\begin{itemize}
\Merge{teilnehmer}{%
    \item \textbf{\Vorname ~\Name} \\ \Funktion \\
}
\end{itemize}
\end{document}

Csvtools

Csvtools von Dr. Nicola Talbot verhält sich ähnlich zu dem bereits vorgestellten Paket Textmerg. Die Daten befinden sich in einer Textdatei im CSV-Format. Jede Zeile darin entspricht einem Datensatz, ein Komma trennt jeweils die einzelnen Felder eines Datensatzes voneinander.

TIPP

Üblicherweise fungiert in CSV-Dateien ein Komma als Trennzeichen. Mit dem Kommando \setcsvseparator{Trennzeichen} legen Sie bei Bedarf ein anderes Symbol fest. Tritt das Trennzeichen in einem Eintrag auf, schreiben Sie den Inhalt des Feldes in Anführungszeichen.

Listing 4 demonstriert am Beispiel einer Einladung den Einsatz des Pakets Csvtools. In der Präambel laden Sie nach der Dokumentenklasse und den Spracheinstellungen das Paket Csvtools (Zeile 5). Mit dem Kommando in Zeile 10 öffnen Sie zunächst die in Klammern angegebene CSV-Datei. Alle nachfolgenden Kommandos zwischen der nächsten öffnenden und der passenden schließenden Klammer (Zeile 34) kommen bei jedem Datensatz zum Tragen.

Die Variablen in den Zeilen 18 und 19 leiten sich von der ersten Zeile in der CSV-Datei ab. Das Kommando aus Zeile 10 interpretiert diese Einträge als Überschriften der Felder oder Spalten. Deren Namen richtet sich nach den Gepflogenheiten unter LaTeX: Sie enthalten also weder Umlaute noch Leer- oder Sonderzeichen.

Listing 4

\documentclass[10pt]{article}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{csvtools}
\usepackage{palatino}
\setcsvseparator{;}
\begin{document}
\applyCSVfile{teilnehmer.csv}{%
\begin{center}
Rathaus der Stadt Stenkelfeld -- Rathausgasse 12f -- 00101 Stenkelfeld
\end{center}
~ \\
An Herrn \\
\insertVorname ~\insertName \\
\insertFunktion \\
~ \\
\textbf{Einladung zum Neujahrskonzert} \\
~ \\
Sehr geehrter Herr \insertName, \\
~ \\
am Sonnabend, dem 5. Januar 2013, findet um 11:00 Uhr im großen
Festsaal des Gasthofs Knollmeyer das diesjährige Neujahrskonzert
statt. Wir möchten Sie gern zu dieser herausragenden Veranstaltung
einladen und freuen uns sehr auf ihre Teilnahme. \\
~ \\
Mit freundlichen Grüßen, \\
~\\
Wilhelm Oelgemöller, Bürgermeister
33
\newpage }
\end{document}

Alternativ fügen Sie die Daten aus der gewünschten Spalte über \insertbyname{Spaltenname} ein. Verfügt die CSV-Datei in der ersten Zeile über keine Felder- oder Spaltenüberschriften, verwenden Sie zum Einlesen stattdessen das Kommando \applyCSVfile*{Datei} und referenzieren die Spalten über das Kommando \field mit der Spaltennummer als Parameter. Abbildung 2 zeigt das Ergebnis aus Listing 4, wobei das Schreiben für jeden Adressaten auf einer separaten Seite erscheint.

Abbildung 2: Die Daten für die einzelnen Adressaten stammen bei diesem Anschreiben aus einer separaten CSV-Datei.

Das LaTeX-Paket bietet noch wesentlich mehr Möglichkeiten, wie etwa die vereinfachte Ausgabe in Tabellen. Die Dokumentation zu Csvtools liegt zwar nur auf Englisch vor, umfasst aber erfreulich viele Beispiele. Der Autor von Cvstools hat auch das Datatool-Paket [6] entwickelt, das in Teilen auf den Csvtools aufbaut und das Erstellen von Torten- und Balkendiagrammen vereinfacht.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare

Infos zur Publikation

title_2014_10

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 4 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...