Effiziente und fehlerfreie Berichte oder Aufsätze zu erstellen, ist der Fokus der Dokumentenautomation mit PythonTeX. PythonTex ist ein Zusatzpaket, welches in Verbindung mit LaTeX genutzt werden kann, um Dokumenteninhalte dynamisch mit Hilfe der Programmiersprache Python zu generieren.
Autor von PythonTeX ist Geoffrey M. Poore. Das Paket ist LaTeX-typisch frei verfügbar und kann bei GitHub heruntergeladen und installiert werden. Üblicherweise ist das Paket aber in allen nennenswerten LaTeX-Distributionen bereits enthalten beziehungsweise kann über deren Paketmanager einfach installiert werden. In meinem macTeX 2018 war die PythonTeX-Version 0.16 enthalten. die ich für diesen Beitrag auch verwendet habe.
Zielgruppe
Für wen ist die Dokumentenautomation mit PythonTeX eigentlich interessant, werden Sie sich vielleicht fragen? – In erster Linie sind das natürlich LaTeX-Anwender. Die Kernfrage lautet jedoch, welche Vorteile habe ich, wenn ich meine Dokumente automatisiert erstellen lasse?
Automatisierung befreit uns von repetitiven Tätigkeiten, die in der Regel langweilig, aufwendig und oftmals auch fehlerträchtig sind. Alle, die viel schreiben, kennen das. Beim Setzen von Tabellen, mathematischen Formeln und ähnlichen Dingen mehr, verschreibt man sich schnell. Sofern man seine Fehler vor der Veröffentlichung des Dokuments bemerkt, hat man Glück. Andernfalls ist das Ganze zumindest peinlich. Außerdem sind gerade mathematische Formeln mit einem nicht unerheblichen Aufwand verbunden. Ähnliches gilt aber auch für das Erstellen von Grafiken und anderen Dingen, die in einem Dokument vorkommen. Dabei lassen sich die jeweiligen Erstellungsprozesse von vielen dieser Dinge oft einfach beschreiben
Es wäre daher schön, wenn es Mittel und Wege gäbe, die einem Autor die Arbeit dahingehend erleichtern, die oben genannten Inhalte, die manuell aufwendig zu erstellen sind, automatisch zu generieren.
Dokumentenautomation mit PythonTeX
PythonTeX nimmt die Idee der automatischen Dokumentenerstellung genau in diesem Sinne auf, den Autor von zeitintensiven, fehlerträchtigen Aufgaben bei der Erstellung seiner Dokumente zu entlasten. Wer die Programmiersprache Python beherrscht, kann mittels PythonTeX viele Inhalte automatisiert erstellen lassen. Dazu beschreibt er die Inhalte mittels Python-Programmen.
Auf diese Weise lassen sich mathematische Formeln, Berechnungen, Tabellen und andere Dinge mehr oft sehr einfach und vor allem auch effizient und fehlerfrei erstellen. Zudem können Dokumente durch die Anbindung an eine Datenbank oder auch Dateien mit Messergebnissen oder ähnlichen Daten, stets aktuell gehalten werden. Das betreffende LaTeX-Dokument muss lediglich neu übersetzt werden. Die enthaltenen Python-Routinen werden ausgeführt und das Dokument mit aktuellen Daten neu erstellt.
Wer also viel schreibt und der Programmiersprache Python mächtig ist, kann sich mit PythonTeX das Leben deutlich einfacher machen.
Leider ist ein Blog-Beitrag, der in HTML geschrieben wird, kein gutes Medium, um die Fähigkeiten von PythonTeX glaubhaft und überzeugend zu demonstrieren. Ich habe daher einen kurzen Beispiel-Artikel verfasst, der den Umgang mit PythonTex demonstriert.
Praxisbeispiel
Für den Artikel, den Sie sich unten als PDF-Dokument ansehen und herunterladen können, habe ich macTeX 2018 und PythonTeX in der Version 0.16 unter macOS 10.14 (Mojave) verwendet. Python ist auf meinem Rechner in den Versionen 2.7, in macOS integriert, und 3.7.0 installiert. PythonTeX kann mit beiden Versionen umgehen.
Ein LaTeX-Dokument, in welchem PythonTeX verwendet werden soll, muss mit
1 |
\usepackage{pythontex} |
PythonTeX einbinden. Die Übersetzung des Dokuments erfordert dann mindestens drei Schritte:
- Das Dokument ist mit
latex
,pdflatex
, … zu übersetzen. Dabei werden einige Dateien erzeugt, die dannpythontex
für seine Arbeit benötigt. - Mit
pythontex
werden nun die Python-Anweisungen im Dokument ausgeführt und die Resultate werden in entsprechenden Zwischendateien gespeichert. - Ein weiterer Durchlauf von
pdflatex
und Co. bindet die im vorigen Schritt erstellten Zwischendateien ein und generiert so das abschließende Dokument.
Wenn noch Inhalts- oder sonstige Verzeichnisse aktualisiert werden müssen, sind noch weitere Übersetzungläufe erforderlich – Sie kennen das.
Welche Python-Version genutzt werden soll, kann pythontex
über eine Kommandozeilenoption mitgeteilt werden.
1 |
$ pythontex --interpreter python:python3 DokumentName |
nutzt beispielsweise Python 3.
Wem das manuelle Übersetzen zu nervig ist, kann latexmk
nutzen, um die notwendigen Übersetzungsläufe feststellen und automatisch ausführen zu lassen.
Mit diesem Grundwissen ausgerüstet, können Sie sich bereits daran machen, PythonTeX selbst auszuprobieren. In der Dokumentation von PythonTex finden Sie eine Schnellstart-Anleitung sowie natürlich auch eine ausführliche Dokumentation aller Features und Optionen. – Probieren Sie es aus. Sofern Sie mit LaTeX umgehen und Python programmieren können, werden Sie feststellen, sehr schnell und effizient mit PythonTeX arbeiten zu können.
Hier nun das versprochene Beispiel-Dokument zum Download.
Fazit
Wenngleich PythonTex sich sicherlich vornehmlich an wissenschaftlich orientierte LaTeX-Anwender richtet, ist das Paket doch auch für jeden anderen LaTeX-Anwender eine echte Bereicherung. Die Dokumentenautomation mit PythonTeX ist, vorausgesetzt man kann Python programmieren, kein Buch mit sieben Siegeln. Es ist fast keine Einarbeitung erforderlich. Man kann gleich produktiv loslegen.
Wie das Beispiel-Dokument hoffentlich anschaulich zeigt, kann PythonTeX die Arbeitseffizienz signifikant steigern.
Nachtrag (14.03.2022)
Gestern habe ich mein Beispieldokument versucht unter Microsoft Windows 10 zu übersetzen. Als Python-Version habe ich 3.10.2 verwendet und MikTeX 22.1. Dabei musste ich feststellen, das Dokument nicht übersetzen zu können.
Beim Aufruf von PythonTeX wurde bemängelt, eine Datei sei durch einen anderen Prozess blockiert. Unter Gnu/Linux oder auf meinen Macs tritt das Problem nicht auf. Die Lösung ist aber dennoch einfach. – Auch wenn ich locker eine Stunde habe recherchieren und experimentieren müssen.
Das Problem besteht darin, die Grafik zu erstellen, in eine Datei zu schreiben und diese dann wieder einzubinden. Eine Zeile reicht aus, das Problem zu beheben.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
\begin{pycode} from pylab import * matplotlib.use('pgf') # Unter Windows, MUSS das PGF-Backend registriert werden. Andernfalls gibt es Fehler # wegen von anderen Prozessen gesperrter Dateien # from matplotlib.backends.backend_pgf import FigureCanvasPgf # matplotlib.backend_bases.register_backend('pdf', FigureCanvasPgf) def f(t): return cos(2 * pi * t) * exp(-t) t = linspace(0, 10, 500) y = f(t) clf() figure(figsize=(5, 3)) rc("text", usetex=True) plot(t, y) title(r'Ged\"ampfter exponentieller Zerfall') # ACHTUNG: Umlaut! text(6, 0.15, r"$y = \cos(2 \pi t) e^{-t}$") xlabel("Zeit (t)") ylabel("Spannung (mV)") savefig("zerfall.pdf", bbox_inches="tight") print(r"\begin{center}") print(r"\includegraphics[width=0.9\textwidth]{zerfall.pdf}") print(r"\end{center}") \end{pycode} |
In der Folge dauert die Ausführung von PythonTex allerdings deutlich länger. Insgesamt braucht es auf meinem Windows-Rechner jetzt rund drei Sekunden. Naja, das ist wohl zu verschmerzen.
Nachtrag (31.03.2022)
Am 09.02.2022 hat mich Bernhard Esslinger, Honorar-Professor am Institute of Business and Information Systems Engineering der Universität Siegen, angeschrieben. Er schrieb mir, er arbeite mit seinen Studenten an einem Papier zur Verwendung von PythonTex. Im Rahmen unseres kurzen, nichtsdestoweniger interessanten Austauschs, bot er an:
Wenn Sie wollen, schicke ich Ihnen auch gern unser Dokument zu PythonTeX, wenn es fertig ist. Es ist kein wissenschaftliches Paper, sondern einfach eine Sammlung, was wir probierten, was geht und was nicht. Mit Beispielen haben Studenten oft leichter Zugang zu LaTeX.
Nun, heute hat er mir den Link zu dem erarbeiteten Papier, PythonTeX and LaTeX, zugesendet. Ich habe das Dokument bisher nur grob überfliegen können, habe jedoch bereits feststellen können, dass es auf 58 Seiten die Nutzung von PythonTeX kompakt, verständlich und vor allem mit vielen praktischen Beispielen zeigt. Dynamische Tabellen, Webscraping und viele, viele Themen mehr werden behandelt und an direkt nachvollziehbaren Beispielen vorgeführt.
Ganz besonders gefällt mir, dass gezeigt und erklärt wird, was wie funktioniert und was weshalb wieso auch nicht funktioniert. Das gilt insbesondere für Abschnitt 15, Passing Variables, ein Thema, an dem man sich leicht die Zähne ausbeißen kann. In dem Papier von Bernhard Esslinger ist dieser Part aber hervorragend erläutert.
Bernhard Esslinger hat mit PythonTeX and LaTeX nicht nur einen hervorragenden Leitfaden zur Nutzung von PythonTeX veröffentlicht, der zu alledem auch noch kostenlos ist, er betreibt mit CrypTool auch eine tolle Seite zum Thema Kryptologie, die sich jeder Interessierte einmal ansehen sollte. Dort kann jeder Krypto-Algorithmen online ausprobieren, findet Werkzeuge und Dokumentationen. – Ich verstehe davon leider nicht viel, weil die Kryptologie nicht mein Fachgebiet ist. Aber selbst ich, als interessierter Laie, erkenne, dass CrypTool in jedem Fall mehr als nur einen Blick wert ist.
Karsten Brodmann
Danke und Grüße aus Hamburg!