Moin liebe Lesergemeinde,
da ich mich ja, wie ihr wisst, ausführlich mit LaTeX beschäftige, gibt es heute eine kleine GUI Anwendung, die das Leben mit LaTeX etwas vereinfachen soll.
Aber vorher noch zur Vorgeschichte:
Ich habe vor einiger Zeit ein Projekt begonnen, was das Schreiben von Briefen in LaTeX vereinfachen soll. Das heißt es gibt eine Oberfläche in der man sämtliche Adressdaten und den Briefinhalt eingeben kann. Beim Speichern der Angaben wird mit Hilfe eines Brief Templates das ganze in einen LaTeX Brief umgewandelt.
Das Ganze soll sich allerdings mehr an Firmen richten, denn jemand (Admin) muss sich die Arbeit machen und ein LaTeX Template im Corporate Design der jeweiligen Firma anfertigen. Dieses Template könnte (read only) im Netz liegen und von den Mitarbeitern mit Hilfe meiner Oberfläche genutzt werden. Das würde den Nutzern erlauben, wirklich nur den Brief mit den jeweiligen Daten zu verfassen, das ganze Layout wird automatisch im Hintergrund durch ein Template erzeugt. Es gibt zwar auch Vorlagen, die man in Word erstellen kann, aber da kann man doch schnell das Design verhunzen, wenn man keine Ahnung hat – außerdem sieht sogar ein Latex Brief deutlich besser aus, als ein Word Brief.
Das Projekt wird in Python mit Qt als GUI Framework geschrieben. Momentan habe ich das große Projekt (was ich eben beschrieben habe) allerdings ersteinmal hinten angestellt. Da ich gerade erst Python richtig lerne, versuche ich kleine Teilaufgaben zu programmieren. Die heute vorgestellte Software kann also als Teilprojekt angesehen werden.
Die Oberfläche für die Briefe soll später auch Serienbriefe unterstützen. Da LaTeX aber ein eigenes Adressbuchformat voraussetzt, muss man gängige Adressbücher aus Evolution, Outlook, Thunderbird, etc. erst in dieses Format bringen. Das wäre händisch sehr unschön zu lösen, pflegen lässt sich so ein Adressbuch eher auch schlecht, da es bisher dazu keine sinnvolle Oberfläche gibt.
Adressbuchformat von LaTeX abgespeichert in einem *.adr-Textfile:
\adrentry{Name}{Vorname}{Adresse}{Telefon}{F1}{F2}{Kommentar}{Kürzel}
Durch ein Python Skript von Frederik Elwert bin ich auf die Idee gekommen, eine GUI zum Mapping eines Adressbuches im CSV Format in das LaTeX kompatible Format zu schreiben. Das eigentliche Mapping führt das Skript von Frederik bereits aus, ich habe dieses um eine GUI erweitert. Vollständig konsolenbedienbar bleibt das Skript allerdings trotzdem.
Nun aber genug der Rede:
Wie man sieht, funktioniert das Programm mit Gnome, KDE und Windows. Mac OS kann ich nicht testen. Das Programm sollte mit jeder Standard-Installation von Python und PyQt4 laufen. Bei Kubuntu ist alles standardmäßig vorhanden, bei Ubuntu muss man schauen, ob PyQt4 bereits installiert ist und es notfalls nachinstallieren.
Bedienung:
GUI:
Das Adressbuch muss im CSV Format vorliegen. Jede mir bekannte Adressbuchverwaltung kann in ein CSV Format exportieren, was also kein Problem darstellen dürfte. Das Skript muss ausführbar sein (chmod +x LatexAddressbook.py). Wird das Skript ohne Parameter aufgerufen startet die GUI automatisch (./LatexAddressbook.py). Mit Klick auf die Schaltfläche “…” kann das CSV Adressbuch ausgewählt werden. Ist dies geschehen, sollten in der Liste am rechten Rand des Programms alle verfügbaren Spaltenüberschriften des Adressbuches erscheinen. Diese kann man nun per Drag and Drop in die Textfelder für die jeweiligen Adressbuchfelder des LaTeX Adressbuches ziehen.
Dabei können auch mehrere CSV-Felder in einem LaTeX Feld verbunden werden.
Beispiel: Die Adresse liegt im CSV Adressbuch in den einzelnen Spalten Adresse, PLZ, Ort vor. So kann man das Feld “Address” folgendermaßen gestalten: $Adresse\\$PLZ $Ort. \\ bedeutet in LaTeX einen Zeilenumbruch. Das heißt man hat nun die gesamte Adresse des Empfängers in einem Feld stehen.
In dieser Weise können auch alle anderen Adressbuchfelder ausgefüllt werden. Free 1 und Free 2 sind im LaTeX Adressbuch keiner Funktion zugeordnet und können so frei verwendet werden. Mit Klick auf OK wird man nach dem Speicherort für das LaTeX Adressbuch gefragt. Dieses wird mit der Erweiterung *.adr gespeichert.
Konsole:
Hier ist die Bedienung der vom Original Skript übernommen. Mit dem Befehl
./LatexAddressbook.py -h
wird die Hilfe angezeigt. Hier ist ein Beispielbefehl, wie er zur Umwandlung des Adressbuches genutzt werden kann.
./LatexAddressbook.py -m 'Name=$Nachname' -m 'Vorname=$Vorname' -m 'Adresse=$Strasse\\$PLZ $Ort' -m 'F1=$Geschlecht' -o 'adressen.adr' adressen.csv
So das wars auch schon zur Benutzung. Bei meinen Tests hat eigentlich alles funktioniert soweit. Bitte gebt mir Feedback, ob prinzipiell Interesse besteht eine GUI für Briefe in LaTeX zu benutzen und wenn ja, was alles an Features enthalten sein sollte. Gibt es eventuell Interessenten, die sich vorstellen könnten, sowas auch in der eigenen Firma einzusetzen? Bitte gebt mir Feedback, ob es sich überhaupt lohnt, soetwas zu programmieren.
Probleme:
Probleme gibt es, wenn es Spaltenüberschriften in der CSV Datei mit Sonderzeichen gibt. Die Überschriften werden im Skript als Schlüssel in einem Dictionary verwendet. Ich habe bisher nichts gefunden, was UTF-8 Schlüssel in Dictionaries in Python erlauben würde. Ich lasse mich aber gerne eines Besseren belehren.
Es fehlt auch noch eine Mehrsprachen-Unterstützung. Die ist allerdings schon vorgesehen. Allerdings würde ich sowas erst implementieren, wenn Interesse an Nutzung bestehen sollte.
Falls weitere Fehler auffallen oder es Verbesserungsvorschläge gibt, dann bitte ab damit in die Kommentare.
Aber nun, fast hätte ich es vergessen, hier der Download des Skripts. Sollte ich das ganze noch weiter entwickeln, würde ich das auch bei Launchpad hosten.
Download: latexAddressbook.zip