MathML verfassen
Diese Seite erklärt, wie man Mathematik mit der MathML-Sprache schreibt, die in Textform mit Tags und Attributen beschrieben wird. Genau wie bei HTML oder SVG kann dieser Text für komplexe Inhalte sehr ausführlich werden und erfordert daher geeignete Autorenwerkzeuge, wie Konverter von einer Lightweight Markup Language oder WYSIWYG-Formeleditoren. Viele solcher Werkzeuge sind verfügbar, und es ist unmöglich, eine vollständige Liste bereitzustellen. Stattdessen konzentriert sich dieser Artikel auf gängige Ansätze und Beispiele.
Verwendung von MathML
Selbst wenn Ihre MathML-Formeln wahrscheinlich von Autorenwerkzeugen generiert werden, ist es wichtig, sich einiger Tipps bewusst zu sein, um sie ordnungsgemäß in Ihr Dokument zu integrieren.
MathML in HTML-Seiten
Jede MathML-Gleichung wird durch ein Wurzelelement math dargestellt, das direkt in HTML-Seiten eingebettet werden kann. Standardmäßig wird die Formel inline gerendert, mit zusätzlichen Anpassungen zur Minimierung ihrer Höhe. Verwenden Sie ein display="block"-Attribut, um komplexe Formeln normal zu rendern und in einem eigenen Absatz anzuzeigen.
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<title>MathML in HTML</title>
</head>
<body>
<h1>MathML in HTML</h1>
<p>
One over square root of two (inline style):
<math>
<mfrac>
<mn>1</mn>
<msqrt>
<mn>2</mn>
</msqrt>
</mfrac>
</math>
</p>
<p>
One over square root of two (display style):
<math display="block">
<mfrac>
<mn>1</mn>
<msqrt>
<mn>2</mn>
</msqrt>
</mfrac>
</math>
</p>
</body>
</html>
Hinweis:
Um MathML in XML-Dokumenten zu verwenden (z.B. XHTML, EPUB oder OpenDocument), fügen Sie ein explizites xmlns="http://www.w3.org/1998/Math/MathML"-Attribut zu jedem <math>-Element hinzu.
Hinweis: Einige E-Mail- oder Instant-Messaging-Clients können Nachrichten im HTML-Format senden und empfangen. Es ist daher möglich, mathematische Formeln in solche Nachrichten einzubetten, solange MathML-Tags nicht durch Markup-Sanitizer herausgefiltert werden.
Fallback für Browser ohne MathML-Unterstützung
Es wird empfohlen, einen Fallback-Mechanismus für Browser ohne MathML-Unterstützung bereitzustellen. Wenn Ihr Dokument nur einfache mathematische Formeln enthält, könnte ein kleines mathml.css-Stylesheet ausreichen. Um es bedingt zu laden, fügen Sie einfach eine Zeile in den Dokumentkopf ein:
<script src="https://fred-wang.github.io/mathml.css/mspace.js"></script>
Falls Sie komplexere Konstruktionen benötigen, sollten Sie stattdessen die umfangreichere MathJax-Bibliothek als MathML-Polyfill in Betracht ziehen:
<script src="https://fred-wang.github.io/mathjax.js/mpadded-min.js"></script>
Alternativ können Sie auch einfach zu Beginn der Seite eine Warnung für Browser ohne gute MathML-Unterstützung anzeigen und den Benutzern die Wahl zwischen einem der oben genannten Fallbacks überlassen:
<script src="https://fred-wang.github.io/mathml-warning.js/mpadded-min.js"></script>
Hinweis: Diese kleinen Skripte führen die Erkennung von Funktionen (der mspace oder mpadded-Elemente) durch, was gegenüber dem Browser-Sniffing bevorzugt wird. Zudem werden sie unter einer Open-Source-Lizenz vertrieben, sodass Sie sie auf Ihrem eigenen Server kopieren und an Ihre Bedürfnisse anpassen können.
Mathematische Schriftarten
Wie im Artikel MathML-Schriftarten erklärt, sind mathematische Schriftarten entscheidend für das Rendern von MathML-Inhalten. Es ist daher immer eine gute Idee, die Installationsanleitungen für solche Schriftarten zu teilen oder sie als Web-Schriftarten bereitzustellen.
Die MathFonts-Seite bietet solche Web-Schriftarten zusammen mit geeigneten Stylesheets. Beispielsweise fügen Sie einfach die folgende Zeile in Ihren Dokumentkopf ein, um die Latin Modern-Schriftarten mit Fallback-Web-Schriftarten auszuwählen:
<link
rel="stylesheet"
href="https://fred-wang.github.io/MathFonts/LatinModern/mathfonts.css" />
Es werden mehrere Schriftarten vorgeschlagen, und Sie können einfach einen anderen Stil auswählen, z.B. STIX:
<link
rel="stylesheet"
href="https://fred-wang.github.io/MathFonts/STIX/mathfonts.css" />
Die XITS-Schriftart wird für Formeln empfohlen, die von rechts nach links dargestellt werden müssen. Weitere Informationen finden Sie im dir-globalen Attribut.
<link
rel="stylesheet"
href="https://fred-wang.github.io/MathFonts/XITS/mathfonts.css" />
Hinweis: Die Schriftarten und Stylesheets von dieser MathFonts-Seite werden unter Open-Source-Lizenzen vertrieben, sodass Sie sie auf Ihrem eigenen Server kopieren und an Ihre Bedürfnisse anpassen können.
Konvertierung aus einer einfachen Syntax
In diesem Abschnitt überprüfen wir einige Werkzeuge zur Konvertierung von MathML aus einer Lightweight Markup Language wie der populären LaTeX-Sprache.
Client-seitige Konvertierung
Bei diesem Ansatz werden Formeln direkt in Webseiten geschrieben und eine JavaScript-Bibliothek übernimmt deren Konvertierung zu MathML. Dies ist wahrscheinlich die einfachste Option, hat aber auch einige Probleme: zusätzlicher JavaScript-Code muss geladen und ausgeführt werden, Autoren müssen reservierte Zeichen maskieren, Web-Crawler haben keinen Zugriff auf die MathML-Ausgabe...
Ein Custom Element kann verwendet werden, um den Quellcode zu hosten und sicherzustellen, dass die entsprechende MathML-Ausgabe eingefügt und über einen Shadow-Subtree gerendert wird. Zum Beispiel kann mit dem <la-tex>-Element von TeXZilla das MathML-Beispiel oben einfach prägnanter umgeschrieben werden:
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<title>MathML in HTML5</title>
<script src="https://fred-wang.github.io/TeXZilla/TeXZilla-min.js"></script>
<script src="https://fred-wang.github.io/TeXZilla/examples/customElement.js"></script>
</head>
<body>
<h1>MathML in HTML5</h1>
<p>
One over square root of two (inline style):
<la-tex>\frac{1}{\sqrt{2}}</la-tex>
</p>
<p>
One over square root of two (display style):
<la-tex display="block">\frac{1}{\sqrt{2}}</la-tex>
</p>
</body>
</html>
Für Autoren, die mit LaTeX nicht vertraut sind, stehen alternative Eingabemethoden zur Verfügung, wie die ASCIIMath oder jqMath Syntax. Stellen Sie sicher, dass Sie die JavaScript-Bibliotheken laden und die richtigen Trennzeichen verwenden:
<!doctype html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>ASCII MathML</title>
…
<!-- ASCIIMathML.js -->
<script src="/path/to/ASCIIMathML.js"></script>
…
<!-- jqMath -->
<script src="https://mathscribe.com/mathscribe/jquery-1.4.3.min.js"></script>
<script src="https://mathscribe.com/mathscribe/jqmath-etc-0.4.6.min.js"></script>
…
</head>
<body>
…
<p>One over square root of two (inline style, ASCIIMath): `1/(sqrt 2)`</p>
…
<p>One over square root of two (inline style, jqMath): $1/√2$</p>
…
<p>One over square root of two (display style, jqMath): $$1/√2$$</p>
…
</body>
</html>
Kommandozeilenprogramme
Anstatt MathML-Ausdrücke beim Laden der Seite zu generieren, können Sie sich stattdessen auf Kommandozeilenwerkzeuge verlassen. Dies führt zu Seiten mit statischen MathML-Inhalten, die schneller geladen werden. Betrachten wir erneut eine Seite input.html mit Inhalten aus der Client-seitigen Konvertierung:
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<title>MathML in HTML5</title>
</head>
<body>
<h1>MathML in HTML5</h1>
<p>One over square root of two (inline style): $\frac{1}{\sqrt{2}}$</p>
<p>One over square root of two (display style): $$\frac{1}{\sqrt{2}}$$</p>
</body>
</html>
Diese Seite enthält keine script-Tags. Stattdessen wird die Konvertierung über die folgende Kommandozeile mithilfe von Node.js und TeXZilla ausgeführt:
cat input.html | node TeXZilla.js streamfilter > output.html
Nach Ausführung dieses Befehls wird eine Datei output.html erstellt, die die folgende HTML-Ausgabe enthält. Die durch Dollarzeichen begrenzten Formeln wurden in MathML umgewandelt:
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<title>MathML in HTML5</title>
</head>
<body>
<h1>MathML in HTML5</h1>
<p>
One over square root of two (inline style):
<math><semantics><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><annotation encoding="TeX">\frac{1}{\sqrt{2}}</annotation></semantics></math>
</p>
<p>
One over square root of two (display style):
<math display="block"><semantics><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><annotation encoding="TeX">\frac{1}{\sqrt{2}}</annotation></semantics></math>
</p>
</body>
</html>
Es gibt komplexere Werkzeuge, die darauf abzielen, ein beliebiges LaTeX-Dokument in ein Dokument mit MathML-Inhalten zu konvertieren. Zum Beispiel werden mit LaTeXML die folgenden Befehle foo.tex in ein HTML- oder EPUB-Dokument konvertieren:
latexmlc --dest foo.html foo.tex # Generate an HTML document foo.html
latexmlc --dest foo.epub foo.tex # Generate an EPUB document foo.epub
latexmlc akzeptiert einen --javascript-Parameter, den Sie verwenden können, um eines der oben erwähnten Fallback-Skripte einzuschließen:
latexmlc --dest foo.html --javascript=https://fred-wang.github.io/mathml.css/mspace.js foo.tex # Add the CSS fallback
latexmlc --dest foo.html --javascript=https://fred-wang.github.io/mathjax.js/mpadded-min.js foo.tex # Add the MathJax fallback
Grafische Schnittstellen
In diesem Abschnitt überprüfen wir einige Bearbeitungswerkzeuge, die grafische Schnittstellen bieten.
Eingabefelder
Ein einfacher Ansatz besteht darin, Konverter aus einer einfachen Syntax als einfache Eingabefelder für Mathematik zu integrieren. Zum Beispiel stellen Thunderbird und SeaMonkey einen Einfügen > Mathe-Befehl bereit, der ein Popup-Fenster öffnet, mit einem LaTeX-zu-MathML-Eingabefeld und einer Live-MathML-Vorschau:

Hinweis: Sie können auch den Befehl Einfügen > HTML verwenden, um beliebige MathML-Inhalte einzufügen.
Der Formeleditor von LibreOffice (Datei → Neu → Formel) zeigt eine mögliche Verbesserung: sein Eingabefeld für die StartMath-Syntax bietet zusätzliche Gleichungspaneele, um vordefinierte mathematische Konstruktionen einzufügen.

Hinweis:
Um den MathML-Code von LibreOffice zu erhalten, speichern Sie das Dokument als mml und öffnen Sie es mit Ihrem bevorzugten Texteditor.
WYSIWYG-Editoren
Andere Editoren bieten Mathe-Bearbeitungsfunktionen, die direkt in ihre WYSIWYG-Oberfläche integriert sind. Die folgenden Screenshots stammen von LyX und TeXmacs, die beide HTML-Export unterstützen:


Hinweis:
Standardmäßig verwenden Lyx und TeXmacs Formele als Bilder in ihrer HTML-Ausgabe. Um stattdessen MathML zu wählen, befolgen Sie diese Anweisungen für Lyx und wählen Sie Benutzereinstellungen > Konvertieren > Exportiere mathematische Formeln als MathML für TeXmacs.
Optische Zeichenerkennung und Handschriftenerkennung
Eine letzte Möglichkeit, Mathematik einzugeben, besteht darin, auf Benutzeroberflächen für optische Zeichenerkennung oder Handschriftenerkennung zurückzugreifen. Einige dieser Werkzeuge unterstützen mathematische Formeln und können sie als MathML exportieren. Der folgende Screenshot zeigt eine Demo von MyScript:
