Headerbild: Dokumentenautomation mit PythonTeX

Dokumentenautomation mit PythonTeX

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

PythonTeX einbinden. Die Übersetzung des Dokuments erfordert dann mindestens drei Schritte:

  1. Das Dokument ist mit latex, pdflatex, … zu übersetzen. Dabei werden einige Dateien erzeugt, die dann pythontex für seine Arbeit benötigt.
  2. Mit pythontex werden nun die Python-Anweisungen im Dokument ausgeführt und die Resultate werden in entsprechenden Zwischendateien gespeichert.
  3. 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.

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.

Beispiel-Artikel

Quellcode + PDF

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.

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

Karsten Brodmann

Karsten Brodmann hat an der Universität Osnabrück BWL/Wirtschaftsinformatik studiert. Er hat viele Jahre in der IT gearbeitet und dort Web- und Datenbankanwendungen entwickelt. Seit Gründung der Punkt-Akademie veröffentlicht Karsten Brodmann auch Schulungsvideos zur Datenbankentwicklung, Unix und Programmierung bei Udemy. In seiner Freizeit fotografiert Karsten Brodmann gerne. Seit vielen Jahren fotografiert er analog und digital. Dabei behält er jeweils den gesamten Workflow in der eigenen Hand, von der Aufnahme über die Dunkelkammer oder auch den Scanner sowie die Bildbearbeitung und den Ausdruck am PC.

Weitere Beiträge

3 Kommentare zu “Dokumentenautomation mit PythonTeX

  1. Hallo,

    der Artikel „https://punkt-akademie.de/wp-content/uploads/2018/10/PythonTeX.pdf“ war sehr schön geschrieben. Alle Beispiele bis auf das in Kapitel 3.2.4 „Funktionsplots“ liefen auf Anhieb.

    Bei diesem Beispiel kam wohl kein Fehler, aber alle anderen Aufrufe von \py in meinem Dokument führten zu keiner Ausgabe. Ich kenne mich mit pylab nicht aus. Kann es sein, dass man eine zusätzliche Datei „zerfall.pdf“ braucht. Oder wo schreibt er diese Datei hin. Ich hatte erwartet, dass die Grafik im Dokument zu sehen ist.

    Ich würde mich über einen Antwort oder den Quellcode Ihrer funktionierenden LaTeX-Datei sehr freuen.

    Viele Grüße, B. Esslinger

    1. Auch Hallo,

      die Datei zerfall.pdf wird in Zeile 16 definiert und bei deren Erstellung entsprechend gespeichert. In Zeile 18 folgt dann quasi das LaTeX-Kommando, diese Datei als Grafik einzubinden, sodass sie im Dokument angezeigt wird.

      Insgesamt funktioniert das bei mir genau so, wie im Beitrag/Artikel dargestellt.

      Ich habe, um den Python-Interpreter nicht immer angeben zu müssen, weil ich nur Python3 verwende, die Datei pythontex dahingehend geändert, den Python-Interpreter dort direkt anzugeben.

      #!/usr/bin/env python3

      Bei mir, unter macos, ist das die Datei /opt/local/bin/pythontex.

      LG
      Karsten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.