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

  • Mit pdflatex bessere PDF-Dateien erzeugen
    Profi-Textsatz ist und bleibt eine Domäne von LaTeX. Soll das Ausgabeformat PDF sein, liefert pdflatex die besten Ergebnisse.
  • LaTeX-Dokumente mit SQL-Abfragen
    LaTeX erzeugt perfekten Textsatz, hat aber kein Interface für den Zugriff auf Datenbanken. Mit LaTeXDB integrieren Sie SQL-Abfragen in Ihre LaTeX-Dokumente und erstellen auf diese Weise zum Beispiel Serienbriefe.
  • LaTeX mit Daten aus externen Quellen anreichern
    Mit Skriptsprachen wie Perl oder Python verheiraten Sie Datenbanken und LaTeX zu einem Dream-Team beim Seriendruck.
  • LaTeX-Workshop, Teil IV
    Im letzten Teil unseres LaTeX-Workshops wollen wir ein paar Besonderheiten behandeln: Wir geben Tipps zum Aufbau komplexer Dokumente und zum Datenaustausch durch PDF- und HTML-Export.
  • Anwendungsbeispiele zu LaTeX und PDF
    Die vergangenen Folgen des LaTeX-Workshops im LinuxUser haben viele Möglichkeiten des Satzsystems vorgestellt. Die letzte Ausgabe geht auf einige spezielle Pakete genauer ein, die PDF-Dateien mit weiteren Finessen versehen.
Kommentare

Infos zur Publikation

LU 01/2015: E-Books im Griff

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

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

PCLinuxOS Version 2014.08 "FullMonty" Umstellung auf deutsch
Karl-Heinz Welz, 19.12.2014 09:55, 3 Antworten
Hallo, liebe Community, ich bin 63 Jahre alt und möchte jetzt nach Jahrzehnten Windows zu Linux...
ICEauthority
Thomas Mann, 17.12.2014 14:49, 2 Antworten
Fehlermeldung beim Start von Linux Mint: Could not update ICEauthority file / home/user/.ICEauth...
Linux einrichten
Sigrid Bölke, 10.12.2014 10:46, 5 Antworten
Hallo, liebe Community, bin hier ganz neu,also entschuldigt,wenn ich hier falsch bin. Mein Prob...
Externe USB-Festplatte mit Ext4 formatiert, USB-Stick wird nicht mehr eingebunden
Wimpy *, 02.12.2014 16:31, 0 Antworten
Hallo, ich habe die externe USB-FP, die nur für Daten-Backup benutzt wird, mit dem YaST-Partition...
Steuern mit Linux
Siegfried Markner, 01.12.2014 11:56, 2 Antworten
Welches Linux eignet sich am besten für Steuerungen.