von Wikipedia nach LaTeX

Werbung
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
Herunterladen