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.
OpenOffice-Anwender erstellen mit der Textverarbeitung in wenigen Schritten Serienbriefe, und auch in anderen Textprogrammen ist diese Funktion selbstverständlich – doch das Textsatzsystem LaTeX[1] kennt kein solches Feature. Dabei gibt es hübsche LaTeX-Klassen für die private oder geschäftliche Korrespondenz, aber sie dienen stets nur dem Verfassen einzelner Schreiben.
Liegen Adress- oder andere Daten als Tabelle in einer der Datenbanken MySQL und Postgresql vor, hilft das in Python geschriebene Tool LaTeXDB [2] weiter: Es integriert SQL-Abfragen in ganz normale LaTeX-Dokumente und verhilft damit auch LaTeX-Freunden zur Serienbrieffunktion.
Bei LaTeXDB handelt es sich nicht um eine echte Erweiterung von LaTeX, sondern um ein Wrapper-Skript: Es sucht in einer LaTeX-Datei nach Datenbankabfragen, leitet diese an die Datenbank weiter und trägt die Ergebnisse in die LaTeX-Datei ein.
Einfache Syntax
Der Aufbau eines LaTeX-Dokuments mit SQL-Aufrufen wird am schnellsten anhand des kleinen Beispiels in Listing 1 deutlich. Bei den fett gedruckten Bereichen des Listings handelt es sich um LaTeXDB-Befehle:
\texdbconnectiondefiniert eine Verbindung mit der SQL-Datenbank. Das erste Argument gibt den Datenbanktyp an (MySQLoderPostgreSQL), danach folgen Server, Benutzername, Passwort und Name der Datenbank.- In
\texdbdeftragen Sie eine SQL-Abfrage ein (in der üblichen SQL-Syntax, alsoselect Spalten from Tabelle) und geben Metavariablen (hier:##Vornameund##Nachname) an, die später im LaTeX-Code den Zugriff auf die Werte ermöglichen. - Am wichtigsten ist schließlich die For-Schleife, die durch das neue Schlüsselwort
\texdbforeingeleitet wird: Für alle Ergebnisse der SQL-Abfrage (“result set”) fügt LaTeXDB das zweite Argument in das LaTeX-Dokument ein. Dabei ersetzt es die Metavariablen durch die aktuellen Werte aus der Datenbankabfrage.
Der Beispiel-LaTeX-Code holt aus einer simplen User-Tabelle Vor- und Nachnamen. Für jeden Treffer erzeugt LaTeXDB dann einen Block, der mit dem Briefkopf beginnt, dann den Adressaten persönlich anspricht und nach dem Brief-Footer einen Seitenvorschub auslöst: So entsteht ein einfacher Serienbrief.
Listing 1
\documentclass{…}\texdbconnection{MySQL,localhost,user,passwort,texdb}\texdbdef{##Users}{select Vorname,Nachname from Users}{##Vorname,##Nachname}
\begin{document}\texdbfor{##Users}{
\briefheader
Hallo, ##Vorname ##Nachname, \\
anbei schicken wir Ihnen eine aktuelle Preisliste.
\brieffooter
\newpage}
\end{document}
TIPP
Beachten Sie bei eigenen LaTeXDB-Experimenten, dass die Metavariablen (die mit ## beginnen), “präfixfrei” sein müssen – es darf also kein Variablenname das Anfangsstück eines anderen Variablennamen sein: ##vorn und ##vorname dürfen nicht gleichzeitig in einem LaTeXDB-Dokument auftauchen.
Programminstallation
LaTeXDB lässt sich schnell installieren: Nach dem Auspacken des Archivs latexdb-0.3.tar.gz liegt im neu erstellten Verzeichnis eine ausführbare Datei install, die Sie mit Root-Rechten aufrufen – das Skript kopiert ein paar Programmdateien und die Manpage in die /usr/local-Hierarchie. Danach können Sie das Programm direkt starten:
$ latexdb -v /usr/local/bin/latexdb version 0.3 (2006/04/24). Relased under the GPL.
Klappt das nicht, ist vielleicht der Pfad falsch eingestellt – /usr/local/bin muss in der Variable $PATH auftauchen.
Datenbank und Tabellen
Eine Tabelle, wahlweise in MySQL oder PostgreSQL, stellt die Mindestvoraussetzung dar, um LaTeXDB zu nutzen. Wer noch keine solche Tabelle angelegt hat, kann die Beispieldateien aus dem LaTeXDB-Paket verwenden oder anpassen: Im Verzeichnis latexdb-0.3/examples/ liegen drei Unterverzeichnisse trivial, advanced und nested.
Um das einfachste Beispiel auszuprobieren, wechseln Sie in das Verzeichnis trivial und führen die dortige SQL-Datei aus – unter MySQL erledigt das zum Beispiel der Befehl
mysql -u user -p < example.sql
Dabei ersetzen Sie user durch den User-Namen, mit dem Sie sich an der Datenbank anmelden. Die SQL-Dateien in den übrigen Beispielverzeichnissen setzen voraus, dass die Datenbank mit dem Namen texdb schon existiert – darum sollten Sie dieses TBeispiel in jedem Fall als erstes testen. Wollen Sie die Tabelle lieber von Hand erzeugen, finden Sie im Kasten “Beispiel-Datenbank anlegen” Hinweise dazu.
Beispiel-Datenbank anlegen
Um manuell mit MySQL eine Datenbank anzulegen, starten Sie zunächst den MySQL-Client – ersetzen Sie im folgenden Aufruf user durch den richtigen User-Namen.
# mysql -u user§§ -p Enter password: Welcome to the MySQL monitor.
Mit create database erzeugen Sie eine neue Datenbank; ein anschließender use-Aufruf macht diese zur aktiven Datenbank für die aktuelle MySQL-Sitzung.
mysql> create database texdb; Query OK, 1 row affected (0.00 sec) mysql> use texdb Database changed
Der Befehl create table legt eine neue, leere Tabelle an; insert into fügt einige Beispieleinträge ein.
mysql> create table Users ( id INT PRIMARY KEY, Vorname VARCHAR(40), Nachname VARCHAR(40) ); Query OK, 0 rows affected (0.00 sec) mysql> insert into Users values (1,"Stefan","Mustermann"); Query OK, 1 row affected (0.00 sec) mysql> insert into Users values (2,"Sabine","Sauer"); Query OK, 1 row affected (0.01 sec)
Prüfen Sie mit einem select-Befehl, ob das geklappt hat:
mysql> select * from Users; +—-+————+————+ | id | Vorname | Nachname | +—-+————+————+ | 0 | Stefan | Mustermann | | 1 | Sabine | Sauer | +—-+————+————+ 2 rows in set (0.00 sec)
Sie können den Mysql-Client dann verlassen.
LaTeXDB testen
Haben Sie die Beispieltabelle angelegt, bearbeiten Sie die zugehörige Tex-Datei (hier: example.tex) – im \texdbconnection-Kommando stehen noch nicht die richtigen Zugangsdaten zur Datenbank. Nachdem Sie diese Zeile angepasst haben, rufen Sie LaTeXDB genau wie LaTeX auf, wahlweise mit DVI- oder PDF-Ausgabe:
latexdb example.tex pdflatexdb example.tex
Der erste Aufruf erzeugt example.dvi, der zweite example.pdf. Die Ausgabe im Terminalfenster ist im Wesentlichen identisch mit der eines normalen LaTeX- bzw. PDFLaTeX-Aufrufs; die Anwesenheit von LaTeXDB bemerken Sie nur an der ersten Ausgabezeile:
Pre-Compiling example.tex (loop 1)
Abbildung 1 zeigt die auf diese Weise erzeugte, einfache DVI-Datei.
LaTeXDB erzeugt eine Reihe von Zwischendateien, die Sie später entsorgen können; zu example.tex entstehen unter anderem example.tex.i, example.tex.pre.i und example.tex.texdb.i, wobei i ein Zähler ist und meist nur den Wert 1 annimmt.
Verschachtelt
SQL-Abfragen können Sie auch schachteln, indem Sie innerhalb einer For-Schleife eine neue Abfrage definieren und darüber wieder eine For-Schleife laufen lassen. Das Quelltextarchiv enthält im Verzeichnis examples/nested/ ein Beispiel für derart geschachtelte Abfragen. Über Schachtelungen nutzen Sie beliebig komplexe Datenstrukturen für Ihr LaTeX-Dokument.
Der Beispiel-Code (Abbildung 2) gibt, basierend auf den Datensätzen einer fiktiven Kunden- und Auftragsdatenbank, sämtliche Aufträge aus und zeigt zusätzlich zu jedem Auftrag an, welche weiteren Bestellungen dieser Kunde getätigt hat.

Abbildung 2: Ein Beispieldokument aus der LaTeXDB-Dokumentation; der markierte Bereich zeigt die verschachtelte SQL-Abfrage.
Bei verschachtelten SQL-Anfragen löst LaTeXDB diese von außen nach innen mit jeweils einem separaten Durchgang auf:
$ latexdb nested.tex Pre-Compiling nested.tex (loop 1) Pre-Compiling nested.tex (loop 2) This is e-TeX, Version 3.14159-2.1 (Web2C 7.4.5) […]
Dabei entstehen zusätzliche Dateien; die Nummer der aktuellen Verschachtelungstiefe (loop 1, loop 2, …) taucht als Dateinamensendung im Arbeitsverzeichnis auf.
Fazit
Die LaTeXDB-eigenen Befehle integrieren sich gut in die normale LaTeX-Syntax; wer LaTeX und SQL bereits gut kennt, kann damit ohne größeren Einarbeitungsaufwand Serienbriefe, Datenbank-Reports und ähnliche Dokumente erstellen.
Glossar
-
SQL
-
Structured Query Language. Eine Standard-Abfragesprache, welche die meisten relationalen Datenbanken verstehen (siehe Artikel S. 38).
-
LaTeX
-
Profi-Textsatzsystem, das auf TeX (einer Entwicklung des Informatik-Professors Donald E. Knuth) beruht.
Infos
[1] LaTeX: http://www.latex-project.org/
[2] LaTeXDB: http://privat.hgesser.com/software/latexdb/





