![]() |
|
||||||||||||||||||
|
|||||||||||||||||||
|
|||||||||||||||||||
|
||
|
TFT Monitor bei
Mercateo kaufen.
Neues Netbook? Ein Preisvergleich lohnt sich. Bei uns finden sie Notebooks, PDAs und Drucker mit Testberichten und Tipps. Diamant Buchhaltungssoftware – transparent und detailliert auch für die Konzernbuchhaltung. Günstige Shareware Programme als direkte Downloads im Software Portal. Bis zu 70% sparen durch Preisvergleich. |
||
|
Hans-Georg Eßer
| README |
|
LaTeX hat kein Serienbrief-Feature. Mit LaTeXDB und einer MySQL- oder PostgreSQL-Datenbank rüsten Sie es nach. Dabei binden Sie mit nur drei neuen Befehlen die Ergebnisse einer SQL-Abfrage in das LaTeX-Dokument ein. |
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.
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:
\texdbconnection definiert eine Verbindung mit der SQL-Datenbank. Das erste Argument gibt den Datenbanktyp an (MySQL oder PostgreSQL), danach folgen Server, Benutzername, Passwort und Name der Datenbank.\texdbdef tragen Sie eine SQL-Abfrage ein (in der üblichen SQL-Syntax, also select Spalten from Tabelle) und geben Metavariablen (hier: ##Vorname und ##Nachname) an, die später im LaTeX-Code den Zugriff auf die Werte ermöglichen.\texdbfor eingeleitet 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 |
01 \documentclass{...}
|
| 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: |
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.
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 Beispiel 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 mysql> create database texdb; Query OK, 1 row affected (0.00 sec) mysql> use texdb Database changed Der Befehl
mysql> create table Users ( id INT PRIMARY KEY, Vorname VARCHAR(40), Nachname VARCHAR(40) );
Prüfen Sie mit einem 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. |
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.
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.
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.
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. (hge)
| Infos |
|
[1] LaTeX: http://www.latex-project.org/
[2] LaTeXDB: http://privat.hgesser.com/software/latexdb/ |
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.
Druckerfreundliche Version |
Feedback zu dieser Seite
|
Datenschutz |
© 2010 Linux New Media AG
[Linux-Magazin]
[LinuxUser]
[EasyLinux]
[Linux-Community]
[Ubuntu User]
[Linux Technical Review]
[Linux Magazine]
[Linux Pro Magazine]
[Ubuntu User]
[EasyLinux Poland]
[Linux Magazine Poland]
[Linux Magazine Brasil]
[EasyLinux Brasil]
[Linux Magazine Spain]