Benutzer:Dirk Hünniger/hal9
Einleitung
[Bearbeiten]Wikipedia hat sich zu einer guten Informationsquelle für Bildung und Wissenschaft entwickelt. LaTeX ist seit Jahrzehnten das Standardwerkzeug des wissenschaftlich technischen Publizierens. Es liegt daher nahe Wikipedia Artikel ins LaTeX Format überführen zu wollen. Wegen des enormen Aufwandes einer händischen Konvertierung bemühte man sich seit einigen Jahren um algorithmische Lösungen. Bei der Entwicklung der Markupsprache wurde einer leichten Erlernbarkeit der Vorzug vor einer effizienten algorithmischen Verarbeitbarkeit gegeben. Es zeigte sich ins Besondere, dass die Sprache nicht kontextfrei ist. Daher erwiesen sich erste Versuche verschiedener Arbeitsgruppen auf Basis von regulären Ausdrücken und Backus-Naur Formen als nicht ausdrucksstark genug um die Sprache beschreiben zu können. Es gelang uns mit Hilfe monadischer Parserkombinatoren eine gute Beschreibung der Sprache zu erreichen. In unseren Tests ließen wir 500 alphabetisch aus der Liste der besten Artikel der Englischen Wikipedia ausgewählte Artikel automatisiert nach LaTeX und PDF konvertieren und erhielten lediglich in einem Prozent der Fälle kein PDF Dokument.
Von Python zu Haskell
[Bearbeiten]Die Entwicklung des Programms begann in Python auf Basis von regulären Ausdrücken. Da viele Teile des Programms nur selten aufgerufen werden, wurde der Wechsel zu einer Sprache mit möglichst intensiven statischen Prüfmöglichkeiten schnell notwendig. Derzeit ist die ca. 100 Zeilen umfassende graphische Benutzeroberfläche die einzige weiterhin in Python implementierte Komponente des insgesamt ca. 10000 Zeilen umfassenden Systems. Gleichzeitig brachte der Wechsel zu den Parserkombinatoren große Fortschritte hinsichtlich der Verarbeitbarkeit der Sprache. Die Notwendigkeit aufwendiger Schreibweisen um zustandsbehaftete Berechnungen in Haskell beschreiben zu können führte uns dazu auf solche weitgehend zu verzichten und somit wesentlich besser wartbaren Quelltext zu verfassen. Die statische Typenprüfung half uns insbesondere bei Refakturierungen sehr viele Programmierfehler schon zur Compilezeit zu entdecken. Wir haben Freude an der Verwendung der Maybe und Either Monaden gefunden und ihre Analogie zu überprüfbaren Ausnahmen in Java kennengelernt. Beim Entwickeln des Quelltextes entsteht durch das vom Compiler erzwungene typenkorrekte Behandeln dieser Ausnahmen zwar ein zusätzlicher Zeitaufwand, welcher jedoch durch den deutlich stabiler laufenden Code mehr als gerechtfertigt ist.
Vergleich mit ähnlichen Systemen
[Bearbeiten]Wikipedia bietet einen eigenen PDF Export an. Hier wird auf reportlab und Python zurückgegriffen. Nachteilig ist hier die mangelnde Unterstützung von Vektorgraphiken. Insbesondere werden Formeln als Bitmap eingebunden was beim Ausdruck auf Laserdrucken zu schlechter Lesbarkeit führen kann. Bekanntermaßen liefert LaTeX eine besonders detaillierte und präzise Umsetzung typographischer Standards welche weit über reportlab hinaus reichen. In Zusammenarbeit mit einem kommerziellen Anbieter bietet Wikipedia den Kauf von gedruckten Artikeln auf Papier an. Diese werden offenbar ebenfalls mit LaTeX gesetzt. Der Entstehungsprozess dieser Dokumente stellt jedoch offensichtlich ein Betriebsgeheimnis dar, so dass die verwendete Software weder binär noch als Quelltext verfügbar ist. Ebenfalls nicht verfügbar sind die hierbei entstehenden PDF und LaTeX Dokumente. Als alternative bietet sich noch die ebenfalls auf monadischen Parserkombinatoren basierende Software pandoc an. Sie ist entstammt jedoch der Verarbeitung von markdown Texten und verwendet daher einen hieran angelehnten Baum als zentrale Datenstruktur welche für die Wikisprache nicht optimal geeignet ist. Weiterhin beschränkt sich pandoc auf die reine Transpilierung von Quelltexten. Unser Programm stellt im Gegensatz dazu eine Komplettlösung dar welche aus einer URL zu einem Wikipedia Artikel automatisch den LaTeX Baum inklusive fertigem PDF Dokument generiert.
Zusammenfassung
[Bearbeiten]Ein Programm zu Konvertierung von Artikeln der Wikipedia in das Schriftsatzsystem LaTeX wird vorgestellt. Das vollständig in Haskell implementierte Kommandozeilenprogramm nimmt eine URL auf einen Wikipedia Artikel entgegen und erzeugt ein mit LaTeX gesetztes PDF Dokument. Allgemein funktioniert das Verfahren für alle auf Media-Wiki basierenden Systeme. Die technischen Besonderheiten bei der Verarbeitung der Wiki Sprachen werden erläutert. Das System wird mit den heute verfügbaren Alternativen verglichen. Auf Erfahrungen mit den Arbeitsabläufen einer Entwicklung in Haskell wird eingegangen.