Immer wieder kommt es vor, dass man mathematische Formeln in Webseiten einbetten muss. MathML wäre hierfür eigentlich die ideale Beschreibungssprache, wenn – und hier liegt wie immer das große Problem – alle Browser MathML-Formeln auch rendern könnten. Der Internet Explorer braucht hierfür ein Plugin und auf Gecko basierende Browser wie zum Beispiel Firefox müssen erst eine spezielle Schriftart installieren.
Also muss eine andere Lösung gefunden werden. Bilder kann (fast) jeder Browser anzeigen und sie sehen, was bei mathematischen Formeln wichtig sein kann, überall gleich aus. Aber wie bekommt man eine Formel in ein Bild?
TeX ist die eine Möglichkeit, aber ich möchte hier eine andere vorstellen: groff. Genauer gesagt GNU troff und dessen Filter eqn. Beide sind normalerweise auf jedem Linux-System installiert, denn groff ist auch verantwortlich für das Formatieren der sogenannten „man-pages“.
Da groff auf direktem Wege keine Bilder erstellen kann, ist außerdem ein Programm nötig, das Postscript-Daten interpretieren und rendern kann. Ich benutze das freie „Ghostscript“ dafür.
Wie setzt man nun Formeln mit groff? Zunächst einmal braucht man eine Formel, wie zum Beispiel E = mc2. Die Syntax [1] von eqn ist in diesem Beispiel recht einfach:
.EQ
E = mc sup 2
.EN
.EQ und .EN sind Makrobefehle, die groff dazu veranlassen den Inhalt dazwischen an das Filterprogramm eqn weiterzureichen. Diesen Text kann man nun, zum Beispiel via Pipe (|), an groff übergeben, wie das folgende Shell-Skript demonstriert:
form="
.EQ
E = mc sup 2
.EN
"
echo "$form" | groff -e -T ps
Der Parameter -e veranlasst groff dazu eqn als Filter zu benutzen. -T ps schaltet auf Postscript-Ausgabe um. Dieser Parameter kann aber auch entfallen, da groffs Standardausgabeformat bereits Postscript ist.
Die Formel ist nun gesetzt und wird als Postscript-Dokument auf der Standardausgabe erscheinen. Um daraus eine Bilddatei, zum Beispiel eine PNG-Grafik, zu machen, muss man groffs Ausgabe an gs weiterleiten:
echo "$form" | groff -e -T ps | gs -r120 -dSAFER -sDEVICE=pnggray \
-dTextAlphaBits=4 -sOutputFile="ausgabe.png" -
-r<Zahl> setzt die Anzahl der Bildpunkte pro Inch (DPI), was die Größe des Bildes beeinflusst. -sDEVICE=pnggray ändert den Ausgabetyp auf „PNG-Bild, Graustufen“ und -dTextAlphaBits=4 die Qualität des gerenderten Textes, wobei hier immer der Maximalwert „4“ eingetragen werden sollte. Das - am Ende der Zeile ist wichtig, da es gs mitteilt, dass es seine Daten von der Standardeingabe (also über die Pipe) beziehen soll.
ausgabe.png enthält nun eine PNG-Grafik mit der Größe einer A4-Seite. „ImageMagick“ kann das Ausschneiden der Formel übernehmen:
convert -trim "ausgabe.png" "ausgabe2.png"
Fertig: 
| [1] | Eine Übersicht über die Syntax bietet „Typesetting Mathematics – User’s Guide“ (Postscript-Dokument) |
#0018,
erstellt: 2009-05-11, aktualisiert: 2009-05-11,
src,
meta
Start,
Impressum,
zurück: pandora.com client, vor: Ask&Answer Sicherheitslücke