Datenbanken in Tabellen ausgeben, in Diagrammen visualisieren und in Seriendokumente übertragen – all das ist mit LaTeX und dem Datatool-Paket kein Problem.
Ob wissenschaftliche Arbeiten, Bewerbungsunterlagen, Vortragsfolien oder einfache Briefe: LaTeX ist ein echter Allrounder. Noch weiter reizen Sie die Möglichkeiten dieses Textsatzsystems aus, indem Sie Ihre LaTeX-Datei mit dem Inhalt einer Datenbank befüllen. Mithilfe des Pakets datatool stellen sie die Datenbank als Tabelle dar, werten die Daten in Diagrammen aus und erstellen eine Serie von Briefen, Formularen oder anderen Dokumenten [1].
Datenbank erstellen
Um eine Datenbank in LaTeX verarbeiten zu können, muss diese als CSV-Datei bereitstehen. Listing 1 enthält als Beispiel eine Teilnehmerliste im CSV-Format. Eine solche CSV-Datei erstellen Sie im einfachsten Fall mit einem Texteditor Ihrer Wahl.
Listing 1
Anrede,Titel,Vorname,Nachname,Postanschrift,PLZ,Ort,Teilnahmegebühr,Platzierung Herr,,Sherlock,Holmes,Bäckergasse 221b,12345,Londinium,"25,00",3 Herr,Dr.,John H.,Watson,Bäckergasse 221b,12345,Londinium,"25,00",5 Herr,,Mycroft,Holmes,Diogenesstr. 73,12345,Londinium,"25,00",2 Herr,,G.,Lestrade,Viktoriadamm 42,12345,Londinium,"25,00",4 Frau,,Irene,Adler,Godfrey-Norton-Str. 21,12345,Londinium,"25,00",1
Jede Zeile enthält einen neuen Datensatz. Innerhalb einer Zeile trennt jeweils ein Komma die einzelnen Werte. Die erste Zeile enthält die Überschriften der Datenfelder. Kommt das als Trenner verwendete Komma in einem Datenfeld vor – im Beispiel bei der Teilnahmegebühr – steht der Feldwert in Anführungszeichen, was das Komma als Teil des Werts kennzeichnet.
Insbesondere bei umfangreicheren Datenbanken fällt es leichter, die Informationen zunächst in einer Tabellenkalkulation wie etwa LibreOffice zu erfassen (Abbildung 1) und die Daten dann im CSV-Format zu exportieren (siehe Kasten “CSV-Datei in LibreOffice erstellen”). Da CSV als Standardformat für den Austausch von Datenbanken gilt, bieten viele Programme, die Datenbanken verarbeiten, eine Funktion an, um eine Datenbank als CSV-Datei zu schreiben.

Abbildung 1: Eine Datenbank, in diesem Fall eine Teilnehmerliste, erfassen Sie am einfachsten in einer Tabellenkalkulation.
CSV-Datei in LibreOffice erstellen
In LibreOffice erstellen Sie aus einer Tabellenkalkulation eine CSV-Datei, indem Sie zum Speichern wie gewohnt den Menüeintrag Datei | Speichern unter … nutzen. Als Dateiformat entscheiden Sie sich im Auswahlfeld unten rechts im Speichern-Dialog für Text CSV (.csv).
Lesehilfe für LaTeX
LaTeX nutzt mit dem Dateiformat DBTEX ein eigenes Format für Datenbanken. Haben Sie eine CSV-Datei in eine LaTeX-Datei eingebunden, erzeugt LaTeX bei der Verarbeitung daraus automatisch eine DBTEX-Datei und arbeitet damit weiter. Das führt bei umfangreichen Datenbanken jedoch zu einem sehr langen LaTeX-Lauf. Wollen Sie dabei Zeit sparen, binden Sie Datenbanken daher besser direkt als DBTEX-Datei in LaTeX ein (Abbildung 2).
Da es sich dabei allerdings nicht um ein Standardformat handelt, lässt sich DBTEX üblicherweise nicht aus einer Tabellenkalkulation oder anderen Programmen, die Datenbanken verarbeiten, erzeugen. Bei einer DBTEX-Datei handelt es sich um eine einfache Textdatei, die Sie prinzipiell mit einem Texteditor erstellen und bearbeiten können. Allerdings ist der Aufbau nicht besonders übersichtlich und eignet sich nur bedingt für das Erstellen von Hand.
Abhilfe schafft das Java-Programm DatatoolTk [2]. Um es nutzen zu können, benötigen Sie die Java-Laufzeitumgebung [3] auf Ihrem System. Nachdem Sie DatatoolTk heruntergeladen und die ZIP-Datei entpackt haben, installieren Sie das Programm über die Shell mit dem Befehl java -jar datatooltk-installer.jar. Ein Assistent führt Sie durch den Installationsprozess. War die Installation erfolgreich, starten Sie das Programm über die Shell mit dem Befehl ./datatooltk-gui.
Über den Menüeintrag File | Import importieren Sie die Datenbank. Neben CSV- und Tabellenkalkulationsdateien liest DatatoolTk dabei auch SQL-Datenbanken ein. Bei Bedarf bearbeiten Sie die importierte Datenbank, bevor Sie sie über den Menüeintrag File | Save As … als DBTEX-Datei auf den Datenträger schreiben.
Datenbank einbinden
Egal, wozu Sie eine Datenbank in einem LaTeX-Dokument verwenden: Zunächst gilt es, die Datenbank in Ihre LaTeX-Datei einzubinden. Liegt die Datenbank als CSV-Datei vor, nutzen Sie dazu in der Präambel der LaTeX-Datei die Befehle aus Listing 2.
Listing 2
\usepackage{datatool}
\DTLsetseparator{,}
\DTLloaddb[keys={Anrede,Titel,Vorname,Nachname,Postanschrift,PLZ,Ort,Teilnahmegebuehr,Platzierung}]{teilnehmerliste}{teilnehmerliste.csv}
Als Erstes laden Sie das Paket datatool (Zeile 1). Danach nennen Sie LaTeX das Zeichen, das die Werte in der Datenbank trennt (Zeile 2). Üblicherweise dient dazu, wie im Beispiel, ein Komma, aber Sie können auch ein anderes Zeichen angeben. Zum Schluss laden Sie die CSV-Datei in das LaTeX-Dokument (Zeile 3).
In der eckigen Klammer vergeben Sie, durch Kommas getrennt, interne Bezeichnungen für die einzelnen Spalten der Datenbank. In der ersten geschweiften Klammer geben Sie der Datenbank einen internen Namen innerhalb Ihrer LaTeX-Datei; der Dateiname findet in der zweiten geschweiften Klammer seinen Platz.
Der Übersicht zuliebe empfiehlt es sich, den Dateinamen und den internen Namen einheitlich zu wählen. Über den internen Namen der Datenbank und die internen Bezeichnungen für die Spalten sprechen Sie später im Hauptteil der LaTeX-Datei die einzelnen Werte der Datenbank an.
Haben Sie die CSV-Datei bereits, wie oben beschrieben, mit DatatoolTk in eine DBTEX-Datei umgewandelt, geht das Einbinden einfacher: Es genügen die beiden Befehle aus Listing 3. Als Erstes laden Sie auch hier das Paket datatool (Zeile 1). Danach reicht es, einfach die DBTEX-Datei ohne weitere Angaben einzubinden. Der LaTeX-interne Name der Datenbank entspricht in diesem Fall dem Dateinamen ohne Endung, und die LaTeX-internen Bezeichnungen für die einzelnen Spalten entsprechen den Spaltenüberschriften aus der ersten Zeile der Datenbank. Bei Bedarf ändern Sie diese Angaben in DatatoolTk.
Listing 3
\usepackage{datatool}
\input{teilnehmerliste.dbtex}
Daten ausgeben
Haben Sie die Datenbank in die LaTeX-Datei eingebunden, greifen Sie auf die enthaltenen Daten über das Dokument zu. Im einfachsten Fall geben Sie die gesamte Datenbank als Tabelle aus [4]. Dazu dient der Befehl aus Listing 4, der alle Daten aus der Datenbank in eine tabular-Umgebung übernimmt, die LaTeX-Standard-Umgebung für Tabellen (Abbildung 3).
Listing 4
\DTLdisplaydb{teilnehmerliste}
Im Beispiel passt der Inhalt der gesamten Datenbank auf eine Dokumentenseite. Enthält die Datenbank jedoch mehr Daten, sodass die Tabelle mehrere Seiten in Anspruch nimmt, nutzen Sie stattdessen den Befehl aus der vierten Zeile von Listing 5. Er befüllt eine longtable-Umgebung [5] mit den Daten, was Seitenumbrüche innerhalb der Tabelle ermöglicht. Dazu laden Sie in der Präambel vorher das Paket longtable (Zeile 2).
Listing 5
% Präambel:
\usepackage{longtable}
% Hauptteil:
\DTLdisplaylongdb{teilnehmerliste}
Diagramme erstellen
LaTeX kann viel mehr, als eine Datenbank einfach nur in Tabellenform darzustellen. Das System erlaubt es Ihnen, die Daten auch auszuwerten, beispielsweise indem Sie ein Diagramm erstellen.
Listing 6 zeigt als Beispiel die Ergebnisse, die Teilnehmer in verschiedenen Aufgaben eines Wettbewerbs erzielt haben, in Form einer CSV-Datei. Diese Ergebnisse soll LaTeX nun in Form eines Balkendiagramms darstellen. Listing 7 enthält den passenden Ausschnitt aus der LaTeX-Datei. Das passende LaTeX-Paket, das Sie zunächst in der Präambel laden, ist in diesem Fall databar (Zeile 2), eine Erweiterung von datatool für Diagramme.
Listing 6
Vorname,Name,Aufgabe A,Aufgabe B,Aufgabe C Sherlock,Holmes,67,73,87 John H.,Watson,12,8,18 Mycroft,Holmes,83,79,87 G.,Lestrade,21,19,25 Irene,Adler,96,98,92
Listing 7
% Präambel:
\usepackage{databar}
\DTLsetseparator{,}
\DTLloaddb[keys={Vorname,Name,AufgabeA,AufgabeB,AufgabeC}]{punkte}{punkte.csv}
% Hauptteil:
\begin{document}
\DTLmultibarchart%
{%
variables={\AufgabeA,\AufgabeB,\AufgabeC},%
barwidth=20pt,%
uppermultibarlabels={\AufgabeA,\AufgabeB,\AufgabeC},%
barlabel={\Vorname\ \Name}%
}%
{punkte}%
{\Vorname=Vorname,\Name=Name,\AufgabeA=AufgabeA,\AufgabeB=AufgabeB,\AufgabeC=AufgabeC}
\end{document}
Danach binden Sie die CSV-Datei wie oben beschrieben ein (Zeilen 3 und 4). Der Befehl im Hauptteil, mit dem Sie das Balkendiagramm erstellen (Zeilen 7 bis 15), ist etwas unübersichtlich: Alle nötigen Informationen stehen in den drei geschweiften Klammern dieses einen Befehls, wobei diese ihrerseits geschweifte Klammern aufnehmen, was den Überblick nicht erleichtert.
Der Inhalt der einzelnen geschweiften Klammern erschließt sich am einfachsten in umgekehrter Reihenfolge. In der dritten geschweiften Klammer (Zeile 15) ordnen Sie jeder Spalte der CSV-Datei eine Variable zu, mit der Sie die Daten aus dieser Spalte im Dokument verwenden. Im Beispiel entspricht also die Variable \Vorname der Datenbankspalte Vorname, und so weiter. In der zweiten geschweiften Klammer (Zeile 14) steht der LaTeX-interne Name der Datenbank.
In der ersten geschweiften Klammer (Zeile 8 bis 13) kommen alle Angaben für das Erzeugen des Balkendiagramms unter – als Erstes die Variablen, die Databar in das Diagramm packen soll. Hier sind das die Punktzahlen, die die einzelnen Teilnehmer in jeder der drei Aufgaben erzielt haben (Zeile 9).
Danach legen Sie mit der Option barwidth die Dicke der einzelnen Diagrammbalken auf 20 Punkt fest (Zeile 10). Nun bestimmen Sie, welche Bezeichnung über den Balken des Diagramms stehen soll, im Beispiel die erzielten Punkte (Zeile 11). Zum Schluss geben Sie an, welche Angabe unter den Balken des Diagramms stehen soll, im Beispiel die Namen der Teilnehmer (Zeile 12). Abbildung 4 zeigt das Ergebnis.
Seriendokumente
Eine weitere Möglichkeit, die in einer Datenbank abgelegten Informationen einzusetzen, stellt das Erzeugen von Seriendokumenten dar. Das können beispielsweise Quittungen für Vereinsmitglieder über den jährlichen Beitrag sein [6], Namensschilder für Konferenzteilnehmer, oder, wie in Listing 8, ein Serienbrief.
Listing 8
\documentclass{scrlttr2}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{datatool}
\DTLsetseparator{,}
\DTLloaddb[keys={Anrede,Titel,Vorname,Nachname,Postanschrift,PLZ,Ort,Teilnahmegebuehr,Platzierung}]{teilnehmerliste}{teilnehmerliste.csv}
\setkomavar{subject}{Teilnahmebescheinigung}
\setkomavar{date}{\today}
\begin{document}
\DTLenvforeach{teilnehmerliste}{\Anrede=Anrede,\Titel=Titel,\Vorname=Vorname,\Nachname=Nachname,\Postanschrift=Postanschrift,\PLZ=PLZ,\Ort=Ort,\Teilnahmegebuehr=Teilnahmegebuehr,\Platzierung=Platzierung}
\begin{letter}{%
\Anrede\ \Titel\\
\Vorname\ \Nachname\\
\Postanschrift\\
\PLZ\ \Ort
}
\opening{\ifstr{\Anrede}{Herr}{Sehr geehrter Herr \Nachname ,}{Sehr geehrte Frau \Nachname ,}}
hiermit bescheinigen wir Ihnen die Teilnahme am Deutschen Deduktionswettbewerb, bei dem Sie den \Platzierung . Platz belegt haben.\\ Ihre Teilnahmegebühr von \Teilnahmegebuehr\ Euro haben wir erhalten.
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}
Für einen Serienbrief kommt die Dokumentenklasse scrlttr2 [7] für deutschsprachige Briefe zum Einsatz (Zeile 1). Das Beispiel beschränkt sich auf das nötigste Minimum aller Funktionen; für eigene Serienbriefe stehen Ihnen die umfangreichen Möglichkeiten dieser Dokumentenklasse zur Verfügung.
Anschließend legen Sie die passenden Zeichenkodierungen fest (Zeile 2 und 3) und stellen Deutsch in neuer Rechtschreibung als Sprache ein (Zeile 4). Im Beispiel greifen wir dann auf die Datenbank aus Listing 1 zurück, die Sie auf die bekannte Weise einbinden (Zeilen 5 bis 7). Außerdem geben Sie einen Betreff (Zeile 8) sowie das Datum an, im Beispiel das jeweilige Tagesdatum (Zeile 9).
Im Hauptteil legen Sie zunächst Variablen für die einzelnen Datenbankspalten fest, die später im Brieftext zum Einsatz kommen. Dazu dient der Befehl aus Zeile 11. Dessen erste geschweifte Klammer nimmt den LaTeX-internen Namen der Datenbank auf. In der zweiten geschweiften Klammer definieren Sie die Variablen; im Beispiel repräsentiert also die Variable \Anrede die Datenbankspalte Anrede, und so weiter.
Es folgt die Umgebung letter, die den Brief mithilfe der einzelnen Variablen zusammenbaut (Zeilen 12 bis 22). In der geschweiften Klammer unmittelbar nach Eröffnung der Umgebung finden Sie die Variablen für Namen und Anschrift (Zeilen 12 bis 17), die im Brief als Adressfeld gesetzt werden. Daran schließt sich die Anrede im Brief an (Zeile 18). Für Männer und Frauen kommen unterschiedliche Formeln in der Anrede zum Einsatz. Enthält die Variable \Anrede den Wert “Herr”, lautet die Anredeformel “Sehr geehrter Herr”, andernfalls lautet sie “Sehr geehrte Frau”.
Es folgt der Brieftext (Zeile 19), in dem Sie auch Variablen verwenden dürfen. Beachten Sie dabei: Soll nach dem Text aus einer Variable ein Leerzeichen im Brief stehen, fügen Sie der Variable einen umgekehrten Schrägstrich (\) an. Fehlt dieses Zeichen, schließt sich der folgende Text unmittelbar ohne Leerzeichen an, auch wenn im Quellcode der LaTeX-Datei ein Leerzeichen steht.
Am Ende folgt noch die Schlussformel (Zeile 20), und Ihr Serienbrief ist komplett. Auf diese Weise erzeugen Sie mit nur einem LaTeX-Lauf für jeden Datensatz in der Datenbank einen eigenen Brief.
Fazit
LaTeX bietet vielfältige Möglichkeiten, Daten aus einer Datenbank mit wenig Zeilen Code in ein Dokument zu integrieren und weiterzuverwenden. Das Textsatzsystem erlaubt dabei auch, die Daten in einer Tabelle auszugeben oder sie in einem Diagramm grafisch auszuwerten. Bei Bedarf erstellen Sie Seriendokumente wie etwa Serienbriefe und erledigen so in einem einzigen LaTeX-Durchlauf einen ganzen Berg Post. Die Arbeit mit Datenbanken lohnt sich also: Sie sparen Zeit, und das Ergebnis lässt sich sehen. (cla)
Glossar
- CSV
- Comma-separated Values. Dateiformat, das strukturierte Daten in einer Textdatei speichert.
Infos
- LaTeX-Paket datatool: https://ctan.org/pkg/datatool
- DatatoolTk: https://ctan.org/pkg/datatooltk
- Java-Laufzeitumgebung: https://www.java.com
- LaTeX-Tabellen: Daniel Tibi, “Tafelfertig”, LU 01/2015, S. 90, https://www.linux-community.de/33946
- LaTeX-Paket longtable: https://ctan.org/pkg/longtable
- Formulare in LaTeX: Daniel Tibi, “Reine Formalie”, LU 08/2020, S. 42, https://www.linux-community.de/45010
- Briefe mit Scrlttr2: Daniel Tibi, “Blattwerk”, LU 02/2008, S. 54, https://www.linux-community.de/14725








