Verfassen von MathML
Diese Seite erklärt, wie man Mathematik mit der MathML-Sprache schreibt, die in Textformat 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 Autorentools, wie Konverter aus einer leichte Markup-Sprache oder WYSIWYG-Gleichungseditoren. Viele solche Tools 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
Auch wenn Ihre MathML-Formeln wahrscheinlich von Autorentools generiert werden, ist es wichtig, sich einiger Tipps bewusst zu sein, um sie richtig 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 und in ihrem 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 (z. B. XHTML, EPUB oder OpenDocument) zu verwenden, platzieren Sie ein explizites xmlns="http://www.w3.org/1998/Math/MathML"
-Attribut auf jedem <math>
-Element.
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 von Markup-Sanitizern 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 grundlegende 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 Kopfbereich Ihres Dokuments ein:
<script src="https://fred-wang.github.io/mathml.css/mspace.js"></script>
Für komplexere Konstruktionen sollten Sie stattdessen die umfangreichere MathJax Bibliothek als MathML-Polyfill verwenden:
<script src="https://fred-wang.github.io/mathjax.js/mpadded-min.js"></script>
Alternativ können Sie auch einfach eine Warnung oben auf der Seite für Browser ohne ausreichende 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 eine Feature-Erkennung (der mspace oder mpadded Elemente) durch, was gegenüber dem Browser-Sniffing bevorzugt wird. Außerdem werden sie unter einer Open-Source-Lizenz vertrieben, sodass Sie sie gerne auf Ihrem eigenen Server kopieren und an Ihre Bedürfnisse anpassen können.
Mathematische Schriftarten
Wie im Artikel MathML Fonts erklärt, sind mathematische Schriftarten entscheidend, um MathML-Inhalte darzustellen. 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-Schriften zusammen mit passenden Stylesheets an. Um beispielsweise die Latin Modern-Schriften mit Fallback-Web-Schriften auszuwählen, fügen Sie einfach die folgende Zeile in den Kopfbereich Ihres Dokuments ein:
<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, beispielsweise STIX:
<link
rel="stylesheet"
href="https://fred-wang.github.io/MathFonts/STIX/mathfonts.css" />
Hinweis: Die Schriftarten und Stylesheets von dieser MathFonts-Seite werden unter Open-Source-Lizenzen vertrieben, sodass Sie sie gerne auf Ihrem eigenen Server kopieren und an Ihre Bedürfnisse anpassen können.
Konvertierung von einer einfachen Syntax
In diesem Abschnitt überprüfen wir einige Tools, um MathML von einer leichten Markup-Sprache wie der beliebten LaTeX-Sprache zu konvertieren.
Client-seitige Konvertierung
Bei diesem Ansatz werden Formeln direkt in Webseiten geschrieben und eine JavaScript-Bibliothek übernimmt die Konvertierung in MathML. Dies ist wahrscheinlich die einfachste Option, hat aber auch einige Probleme: Zusätzliches JavaScript muss geladen und ausgeführt werden, Autoren müssen reservierte Zeichen escapen, Webcrawler haben keinen Zugriff auf die MathML-Ausgabe...
Ein benutzerdefiniertes Element kann verwendet werden, um den Quellcode zu hosten und sicherzustellen, dass die entsprechende MathML-Ausgabe über einen Shadow-Subtree eingefügt und gerendert wird. Zum Beispiel kann das MathML-Beispiel oben durch Verwendung des <la-tex>
Elements von TeXZilla 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 LaTeX nicht kennen, 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 stattdessen Kommandozeilen-Tools verwenden. Dies führt zu Seiten mit statischem MathML-Inhalt, der schneller lädt. Betrachten wir noch einmal eine Seite input.html
mit Inhalt 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 keinen script
-Tag. Stattdessen wird die Konvertierung über die folgende Kommandozeile mit Node.js und TeXZilla ausgeführt:
cat input.html | node TeXZilla.js streamfilter > output.html
Nach dem Ausführen dieses Kommandos wird eine Datei output.html
erstellt, die den folgenden HTML-Ausgang enthält. Die von Dollarzeichen umschlossenen 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 komplexere Tools, die darauf abzielen, ein beliebiges LaTeX-Dokument in ein Dokument mit MathML-Inhalt zu konvertieren. Zum Beispiel werden die folgenden Befehle mit LaTeXML foo.tex
in ein HTML- oder EPUB-Dokument konvertieren:
latexmlc --dest foo.html foo.tex # Generate a HTML document foo.html
latexmlc --dest foo.epub foo.tex # Generate an EPUB document foo.epub
latexmlc
akzeptiert ein --javascript
-Parameter, den Sie verwenden können, um eines der oben genannten 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 Oberflächen
In diesem Abschnitt überprüfen wir einige Editier-Tools mit grafischen Oberflächen.
Eingabefeld
Ein einfacher Ansatz ist es, Konverter von einer einfachen Syntax als einfache Eingabefelder für Mathematik zu integrieren. Zum Beispiel bieten Thunderbird und SeaMonkey einen Einfügen > Math Befehl an, 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.
LibreOffice's Formeleditor (Datei → Neu → Formel) zeigt eine mögliche Verbesserung: Sein Eingabefeld für die StartMath Syntax bietet zusätzliche Gleichungspaneele 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 Mathe-Editierfunktionen, die direkt in ihre WYSIWYG-Oberfläche integriert sind. Die folgenden Screenshots stammen aus LyX und TeXmacs, beide unterstützen den HTML-Export:
Hinweis:
Standardmäßig verwenden Lyx und TeXmacs Bilder von Formeln in ihrem HTML-Ausgang. Um stattdessen MathML zu wählen, folgen Sie diesen Anweisungen für Ersteres und wählen Sie Benutzervoreinstellung > Konvertieren > Exportiere mathematische Formeln als MathML
für Letzteres.
Optische Zeichen- und Handschriftenerkennung
Eine letzte Möglichkeit, Mathematik einzugeben, ist die Nutzung von Benutzeroberflächen für die Optische Zeichenerkennung oder Handschriftenerkennung. Einige dieser Tools unterstützen mathematische Formeln und können diese als MathML exportieren. Der folgende Screenshot zeigt eine Demo von MyScript: