von Wikipedia nach LaTeX Dirk Hünniger http://mediawiki2latex.wmflabs.org Benutzeroberfläche Qt 4 ● Python 3 ● Web Interface Web Interface Technologien Haskell ● Blaze Html ● Happstack ● HTML5 ● Kein JavaScript ● Keine Cookies ● Manuelle Vorlagenverbeitung Wiki Quelltext: {{KastenMitRahmen|inhalt=ein Inhalt}} Benutzereditierbare Datei ["KastenMitRahmen","fbox",“inhalt“] LaTeX Output \fbox{ein Inhalt} Automatische Vorlagenverarbeitung ● ● I MediaWiki bietet eine Funktion zur Expansion von Vorlagen. Siehe Menüpunkt "Template Expansion=MediaWiki" in der Benutzeroberfläche Direkte Verarbeitung des von MediaWiki erzeugtem HTML. Siehe Menüpunkt "Template Expansion=Print" in der Benutzeroberfläche Klammerschwierigkeiten Falsche Klammerung: <i><b>Hello</i></b> ist zulässig ! => Sprache nicht Kontextfrei ! (Beweis mit Pumping Lemma möglich) Beweis Wenn eine Sprache L kontext-frei ist, dann gibt es eine natürliche Zahl p ≥ 1 so dass man jede Zeichenfolge s in L mit |s| ≥ p schreiben kann als s = uvxyz Wobei für die Zeichenfolgen u, v, x, y and z, gilt 1. |vxy| ≤ p, 2. |vy| ≥ 1, 3. uvnxynz ist auch in L für alle natürlichen Zahlen n ≥ 0. Klammerkorrektur Aus: <u><i><b>Good</u>Bye</i>World</b> Wird: <u><i><b>Good</b></i></u><i><b> Bye</b></i><b>World</b> Umgebungen mit Parsec data MyParser tok = MyParser { start :: MyStack tok -> GenParser tok () StartData, end :: StartData -> GenParser tok () (), allowed :: [EnvType]} Parse Tree '\n',Environment Wikiheading (Str "==") [C 'S',C 'e',C 'e',C ' ',C 'a',C 'l',C 's',C 'o'],Environment Itemgroup (Str "*") [Environment ItemEnv (Str "*") [Item '*',Environment Wikilink (Str "") [C 'c',C 'u',C 'n',C 'c',C 't',C 'i',C 'o',C 'n'],Item '*',Environment Wikilink (Str "") [C 'd',C 'i',C 'f',C 'f',C 'e',C 'o',C 'm',C 'o',C 'r',C 'p',C 'h',C 'i',C 's',C 'm'],Item '*',Environment Wikilink (Str "") [C 'C Vergleich zu Pandoc Beide Systeme verwenden Parsec Pandoc Parse Tree basiert auf Markdown MediaWiki2LaTeX Parse Tree auf MediaWiki Pandoc macht reine Quelltext Transpilierung MediaWiki2LaTeX bietet Komplettlösung bis PDF Vergleich zu Pandoc Beide Systeme verwenden Parsec Pandoc Parse Tree basiert auf Markdown MediaWiki2LaTeX Parse Tree auf MediaWiki Pandoc macht reine Quelltext Transpilierung MediaWiki2LaTeX bieter Komplettlösung bis PDF Unterschied zum Pandoc Tree Pandoc: Zwei Kontentypen einen äußeren und einen Inneren. MediaWiki2LaTeX: Ein Kontentyp in dem alles in allem enthalten sein darf. Problem: Bei Übersetzen von MediaWiki2LaTeX zum Pandoc Baum muss man ziemlich aufwendig neue öffnende und schließende Tag einführen und daraus den Baum neu generieren. Vergleich zu diversen kleineren Projekten Basieren auf BNF oder RegEx Aber: Sprache nicht kontextfrei daher nicht geeignet Vergleich zu Pediapress PediaPress liefert noch bessere LaTeX Versionen Nachteil: Man kommt nicht dran. Man kann lediglich ausgedruckte Bücher kaufen. PediaPress bietet keine Möglichkeit den Konvertierungsprozess zu beeinflussen und an den LaTeX Quelltext kommt man schon gar nicht. PDF Versionen kann man von Wikipedia Herunterladen, jedoch dann mit Reportlab und ohne LaTeX. Verwendete Bibliotheken Image Magick ● Parsec ● Http Conduit ● Python3 und Qt4 für die GUI ● RSVG ● LaTeX ● Happstack (für die „WebGUI“) ● Unicode Windows Variante pdflatex ● Selbst gemischtes Font was 16 Bit Unicode abdeckt ● Vorteil: Übersichtlicher LaTeX Quellcode ● Unicode Debian Variante xelatex ● Aufwendiger Font Wechsel im LaTeX Dokument ● Nachteil: Unübersichtlicher LaTeX Quellcode ● Vorteil: Programm vollständig Teil von Debian ● Automatische Spaltenbreite Jede Spalte einzeln auf „unendliches“ Papier drucken. => Maximale Sinnvolle Spaltenbreite ● Endgültige Spaltenbreiten berechnen ● Multithreaded IO Funktionen in die Parallelität „Liften“ a->b-> IO c Wird zu MVar a->MVar b → IO (MVar c) Index und Interne Referenzen Funktioniert! Aber LaTeX Dokument wird 4 mal kompiliert was den Großteil der Laufzeit des Programms in Anspruch nimmt Bildverarbeitung SVG geht nicht in LaTeX daher nach PDF bzw. PNG konvertieren → LibRSVG Bilder werden in Maximaler Auflösung von den Wiki Servern geladen und auf sinnvolle Größe skaliert → ImageMagick Autorenbestimmung Freie Lizenzen erfordern meist Nennung des Autors. Text und Bildautoren werden vom den Wikiservern geladen. Das von diesen generierte HTML wird hierzu ausgewertet. Python vs Haskell Haskell: Sehr gute statische Prüfungen durch den Compiler. Lage bei GUI Bibliotheken etwas dünn. Lernaufwand bei Haskell sehr hoch. Funktionales Programmieren zwingt zu sauberem Nachdenken und gründlicherem Entwickeln. Python: Mangel an statischer Typenprüfung bereitet bei etwas größeren Projekten schnell Probleme. Sehr schnelle Entwicklung sehr kleiner Projekte. Gute GUI Unterstützung Fragen? http://mediawiki2latex.wmflabs.org