MathML erstellen
Diese Seite erläutert, wie Mathematik mit der MathML-Sprache geschrieben wird, die mit Tags und Attributen im Textformat beschrieben wird. Wie bei HTML oder SVG kann dieser Text bei komplexen Inhalten sehr umfangreich werden und erfordert daher geeignete Erstellungswerkzeuge, beispielsweise Konverter aus einer leichtgewichtigen Auszeichnungssprache oder WYSIWYG-Gleichungseditoren. 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.
MathML verwenden
Auch wenn Ihre MathML-Formeln wahrscheinlich durch Erstellungswerkzeuge generiert werden, ist es wichtig, einige Tipps zu beachten, um sie korrekt in Ihr Dokument zu integrieren.
MathML in HTML-Seiten
Jede MathML-Gleichung wird durch ein math-Stammelement 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 und in einem eigenen Absatz zu rendern.
<!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 bei jedem <math>-Element ein explizites Attribut xmlns="http://www.w3.org/1998/Math/MathML" hinzu.
Hinweis: Einige E-Mail- oder Instant-Messaging-Clients können Nachrichten im HTML-Format senden und empfangen. Daher ist es möglich, mathematische Formeln in solche Nachrichten einzubetten, sofern MathML-Tags nicht von Markup-Sanitisierern herausgefiltert werden.
Fallback für Browser ohne MathML-Unterstützung
Es wird empfohlen, einen Fallback-Mechanismus für Browser ohne MathML-Unterstützung bereitzustellen. Falls Ihr Dokument nur grundlegende mathematische Formeln enthält, genügt möglicherweise ein kleines mathml.css-Stylesheet. 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 Bibliothek MathJax als MathML-Polyfill in Betracht ziehen:
<script src="https://fred-wang.github.io/mathjax.js/mpadded-min.js"></script>
Alternativ können Sie oben auf der Seite für Browser ohne gute MathML-Unterstützung einfach eine Warnung anzeigen und die Benutzer zwischen einem der obigen Fallbacks wählen lassen:
<script src="https://fred-wang.github.io/mathml-warning.js/mpadded-min.js"></script>
Hinweis: Diese kleinen Skripte führen Feature-Erkennung durch (der Elemente mspace oder mpadded), was gegenüber Browser-Sniffing bevorzugt wird. Außerdem werden sie unter einer Open-Source-Lizenz vertrieben; Sie können sie daher gerne auf Ihren eigenen Server kopieren und an Ihre Bedürfnisse anpassen.
Mathematische Schriftarten
Wie im Artikel MathML Fonts erläutert, sind mathematische Schriftarten entscheidend für das Rendern von MathML-Inhalten. Daher ist es immer eine gute Idee, die Installationsanweisungen für solche Schriftarten bereitzustellen oder sie als Webfonts anzubieten.
Die MathFonts-Seite stellt solche Webfonts zusammen mit geeigneten Stylesheets bereit. Fügen Sie beispielsweise einfach die folgende Zeile in den Dokumentkopf ein, um die Schriftarten Latin Modern mit Webfonts als Fallback auszuwählen:
<link
rel="stylesheet"
href="https://fred-wang.github.io/MathFonts/LatinModern/mathfonts.css" />
Es werden mehrere Schriftarten angeboten, und Sie können einfach einen anderen Stil auswählen, beispielsweise 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 gerendert werden müssen.
Weitere Informationen finden Sie in der globalen Eigenschaft dir.
<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; Sie können sie daher gerne auf Ihren eigenen Server kopieren und an Ihre Bedürfnisse anpassen.
Konvertierung aus einer einfachen Syntax
In diesem Abschnitt betrachten wir einige Werkzeuge zum Konvertieren von MathML aus einer leichtgewichtigen Auszeichnungssprache, etwa der beliebten Sprache LaTeX.
Clientseitige Konvertierung
Bei diesem Ansatz werden Formeln direkt in Web-Seiten geschrieben, und eine JavaScript-Bibliothek übernimmt ihre Konvertierung in MathML. Dies ist wahrscheinlich die einfachste Option, hat jedoch auch einige Nachteile: zusätzlicher JavaScript-Code muss geladen und ausgeführt werden, Autoren müssen reservierte Zeichen escapen, und Webcrawler haben keinen Zugriff auf die MathML-Ausgabe ...
Ein benutzerdefiniertes Element kann verwendet werden, um den Quellcode aufzunehmen und sicherzustellen, dass die entsprechende MathML-Ausgabe über einen Shadow-Teilbaum eingefügt und gerendert wird. Beispielsweise kann das oben genannte MathML-Beispiel mit dem Element <la-tex> von TeXZilla wie folgt kompakter geschrieben 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, etwa die Syntax ASCIIMath oder jqMath. 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>
Befehlszeilenprogramme
Statt MathML-Ausdrücke beim Laden der Seite zu generieren, können Sie sich auf Befehlszeilenwerkzeuge 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 clientseitigen 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 kein script-Tag. Stattdessen wird die Konvertierung über die folgende Befehlszeile mit 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 konvertiert:
<!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 anspruchsvollere Werkzeuge, die darauf abzielen, ein beliebiges LaTeX-Dokument in ein Dokument mit MathML-Inhalten zu konvertieren. Mit LaTeXML konvertieren beispielsweise die folgenden Befehle foo.tex in ein HTML- oder EPUB-Dokument:
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 Parameter --javascript, den Sie verwenden können, um eines der oben genannten Fallback-Skripte einzubinden:
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 Benutzeroberflächen
In diesem Abschnitt betrachten wir einige Bearbeitungswerkzeuge mit grafischen Benutzeroberflächen.
Eingabefeld
Ein einfacher Ansatz besteht darin, Konverter aus einer einfachen Syntax als einfache Eingabefelder für Mathematik zu integrieren. Beispielsweise bieten Thunderbird und SeaMonkey den Befehl Einfügen > Mathematik, der ein Popup-Fenster mit einem LaTeX-zu-MathML-Eingabefeld und einer Live-Vorschau für MathML öffnet:

Hinweis: Sie können auch den Befehl Einfügen > HTML verwenden, um beliebige MathML-Inhalte einzufügen.
Der Gleichungseditor von LibreOffice (Datei → Neu → Formel) zeigt eine mögliche Erweiterung: Sein Eingabefeld für die StartMath-Syntax bietet zusätzliche Gleichungsbereiche zum Einfügen vordefinierter mathematischer Konstruktionen.

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 Funktionen zur mathematischen Bearbeitung, die direkt in ihre WYSIWYG-Oberfläche integriert sind. Die folgenden Screenshots stammen von LyX und TeXmacs, die beide den HTML-Export unterstützen:


Hinweis:
Standardmäßig verwenden LyX und TeXmacs in ihrer HTML-Ausgabe Bilder von Formeln. Um stattdessen MathML auszuwählen, folgen Sie diesen Anweisungen für Ersteres und wählen Sie für Letzteres User preference > Convert > Export mathematical formulas as MathML.
Optische Zeichenerkennung und Handschrifterkennung
Eine letzte Möglichkeit zur Eingabe von Mathematik besteht darin, eine Benutzeroberfläche für optische Zeichenerkennung oder Handschrifterkennung zu verwenden. Einige dieser Werkzeuge unterstützen mathematische Formeln und können sie als MathML exportieren. Der folgende Screenshot zeigt eine Demo von MyScript:
