Kurztutorial MathML
|
Andreas de Vries (2012)
Zum Betrachten dieser Seite ist ein Browser notwendig, der MathML interpretieren kann. Leider können das zur Zeit nicht alle gängigen Browser, empfohlen sei hier die aktuelle Version des Firefox, siehe auch das Mozilla MathML Projekt.
Dieses Tutorial gibt einen kurzen Überblick über MathML, das für die meisten Fälle ausreichen sollte, um mathematische Formeln im Web darstellen zu können. Für weitergehende Informationen sei auf die Math Webseite des W3C verwiesen.
Mit Hilfe von MathML können mathematische Zeichen, Ausdrücke und Formeln in
das <body>
-Element eines HTML-Dokuments eingefügt und in einem geeigneten
Browser dargestellt werden.
Ein mathematischer Ausdruck „...“ muss dazu in das Element <math>
mit dem passenden XML-Namensraum eingefügt werden:
<math xmlns="http://www.w3.org/1998/Math/MathML"> ... </math>
(Der Namensraum xmlns
... kann ab HTML5 auch weggelassen werden,
es reicht also auch einfach <math> ... </math>
.)
Die darzustellenden Zeichen sind als Text in eines der folgenden Basiselemente des <math>
-Elementes einzufügen:
<mi>
für Variablen,
z.B. <mi>x</mi>
für „“;
<mn>
für Zahlwerte,
also z.B. <mn>2</mn>
für „“;
<mo>
für mathematische Operatoren und Rechenzeichen, also z.B.
<mo>+</mo>
für „“,
<mo>-</mo>
für „“
oder
<mo>=</mo>
für „“.
Diese Basiselemente sind also für jeden Ausdruck in MathML notwendig und bestimmen
die Schriftsetzung der beinhalteten Zeichen. Die Elemente
<mn>
und <mo>
können mehrere Zeichen beinhalten,
<mi>
dagegen nur einbuchstabige Variablen.
Als erstes „Hallo-Welt-Beipiel“ in MathML betrachten wir den länglichen, aber strukturell einfachen Ausdruck
<math xmlns="http://www.w3.org/1998/Math/MathML"> <mn>4</mn> <mi>x</mi> <mo>+</mo> <mn>4</mn> <mo>=</mo> <mo>(</mo> <mn>2</mn> <mo>+</mo> <mn>2</mn> <mo>)</mo> <mi>x</mi> <mo>+</mo> <mn>2</mn> <mo>·</mo> <mn>2</mn> </math>
der die Gleichung ergibt.
Ein weiteres wichtiges Element in MathML ist
<mrow>
, mit dem man
mehrere MathML-Elemente zu einer Einheit,
einem Term, gruppieren kann.
Eine direkt sichtbare Wirkung hat es für einfache Beispiele zunächst nicht,
wir werden erst weiter unten sehen, wie man mit diesem Element arbeiten kann.
Nachfolgend ist eine Auswahl der gängigsten mathematischen Symbole und ihrer Definition in MathML aufgelistet:
<mn>α</mn>
|
<mn>π</mn>
|
<mn>∞</mn>
|
<mn>±</mn>
|
<mn>∓</mn>
|
<mn>ℏ</mn>
|
||||||
<mo>∑</mo>
|
<mo>∫</mo>
|
<mo>∃</mo>
|
<mo>∀</mo>
|
<mo>⇔</mo>
|
<mn>⇒</mn>
|
||||||
<mo>≠</mo>
|
<mo>≈</mo>
|
<mo>∼</mo>
|
<mo>≅</mo>
|
<mo>∝</mo>
|
<mo>≙</mo>
|
||||||
<mo><</mo>
|
<mo>≤</mo>
|
<mo>≪</mo>
|
<mo>></mo>
|
<mo>≥</mo>
|
<mo>≫</mo>
|
||||||
<mo>·</mo>
|
<mo>×</mo>
|
<mo>∘</mo>
|
<mo>÷</mo>
|
<mo>∖</mo>
|
<mo>⊕</mo>
|
||||||
<mo>∩</mo>
|
<mo>∪</mo>
|
<mo>⊂</mo>
|
<mo>⊃</mo>
|
<mo>∈</mo>
|
<mo>∉</mo>
|
||||||
<mo>∧</mo>
|
<mo>∨</mo>
|
<mo>¬</mo>
|
<mo>→</mo>
|
<mo>↦</mo>
|
<mo>∢</mo>
|
||||||
<mn>∅</mn>
|
<mn>ℕ</mn>
|
<mn>ℤ</mn>
|
<mn>ℚ</mn>
|
<mn>ℝ</mn>
|
<mn>ℂ</mn>
|
Eine vollständige Liste aller Symbole findet man unter http://www.w3.org/TR/xml-entity-names/. Siehe auch https://wiki.selfhtml.org/wiki/Zeichenreferenz.
Daneben kann man mit dem Element <mover>
Akzente über Zeichen und Terme setzen:
erhält man mit
<mover><mi>v</mi><mo>⇀</mo></mover> <mo>+</mo> <mover><mi>w</mi><mo>→</mo></mover> <mo>+</mo> <mover><mi>m</mi><mo>˜</mo></mover> <mo>+</mo> <mover><mi>y</mi><mo>_</mo></mover> <mo>+</mo><mover><mi>m</mi><mo>^</mo></mover>
Ausdrücke werden hoch- oder tiefgestellt durch die Elemente
<msup>
für Exponenten und
<msub>
für Indizes, also beispielsweise
<msub> <mi>y</mi> <mn>0</mn> </msub> <mo>=</mo> <msup> <mi>x</mi> <mn>2</mn> </msup>
für
.
Auch komplexere Terme können im Exponenten dargestellt werden, sie müssen
allerdings mit <mrow>
gruppiert werden:
Für
schreibt man in MathML:
<mi>y</mi> <mo>=</mo> <msup> <mi>x</mi> <mrow> <mn>2</mn> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> </msup>
Funktionen werden in der Regel in kursiven Buchstaben dargestellt,
sind also in das <mi>
-Tag einzuschließen.
Namen für Standardfunktionen wie Sinus, Cosinus, Logarithmus usw. werden dagegen
in Normalschrift gesetzt, daher werden mehrere von <mo>
-Tags
eingeschlossene Buchstabenfolgen nicht kursiv dargestellt.
Die Funktionsdefinition
,
beispielsweise wird erzeugt durch:
<math> <mi>f</mi><mo>:</mo><mn>ℝ</mn><mo>→</mo> <mn>[-1,1]</mn> </math>, <math> <mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo> <mo>=</mo> <mi>sin</mi> <mi>x</mi> </math>
<mfrac>
erzeugt.
Für
beispielsweise mit
<mfrac> <mi>x</mi> <mi>y</mi> </mfrac>Bestehen Zähler oder Nenner aus mehreren Termen, so sind sie mit
<mrow>
zu Einheiten zu gruppieren:
<mi>f</mi><mrow><mi>x</mi><mi>y</mi></mrow> <mo>=</mo> <mfrac> <mrow> <mn>13</mn> <mi>x</mi> <mo>-</mo> <mn>37</mn> </mrow> <mrow> <mn>2</mn> <mi>y</mi> <mo>+</mo> <mn>1</mn> </mrow> </mfrac>
Ein mathematischer Ausdruck kann im Fließtext erscheinen („inline“):
,
oder vom Fließtext abgesetzt und zentriert („block“):
In MathML ist für diese Darstellungsmodi das Attribut display
des <math>
-Elements zuständig:
<math display="inline"> ... </math>
oder
<math display="block"> ... </math>
Im abgesetzten Modus sind die Zeichen und Symbole in Zähler und Nenner in Normalgröße gesetzt, während sie im Fließtextmodus kleiner sind. Wird das Display-Attribut nicht gesetzt, ist automatisch der Inline-Modus gesetzt.
Das Wurzelzeichen erstreckt sich in der mathematischen Notation normalerweise über
einen Term. In MathML wird für das Wurzelzeichen das Element <msqrt>
verwendet:
<msqrt> <mrow> <mn>1</mn> <mo>-</mo> <mfrac> <mi>x</mi> <mn>2</mn> </mfrac> </mrow> </msqrt>
ergibt . Die p-q-Formel zum Beispiel,
wird durch den Quelltext<math display="block"> <mi>x</mi> <mo>=</mo> <mo>-</mo> <mfrac> <mi>p</mi> <mn>2</mn> </mfrac> <mo>±</mo> <mfrac> <mn>1</mn> <mn>2</mn> </mfrac> <msqrt> <mrow> <msup> <mi>p</mi> <mn>2</mn> </msup> <mo>-</mo> <mrow> <mn>4</mn> <mi>q</mi> </mrow> </mrow> </msqrt> </math>bewirkt. Um andere Wurzelexponenten als 2 darzustellen, also nicht die Quadratwurzel zu verwenden, gibt es in MathML das Element
<mroot>
,
das zwei Unterelemente erwartet, zunächst den Term, aus dem die Wurzel zu ziehen ist,
und dann den Wurzelexponent:
<mroot> <mrow> <mn>1</mn> <mo>-</mo> <mfrac> <mi>x</mi> <mn>2</mn> </mfrac> </mrow> <mn>3</mn> </mroot>ergibt somit .
Um Matrizen zu schreiben, benötigen wir das Element
<mrow>
,
das die Klammern <mo>(</mo>
...<mo>)</mo>
und darin das Tabellenelement
<mtable>
umschließt:
wird durch die Anweisungen
<msub><mn>σ</mn><mi>y</mi></msub> <mo>=</mo> <mrow> <mo>(</mo> <mtable> <mtr> <mtd><mn>0</mn></mtd> <mtd><mo>-</mo><mn>i</mn></mtd> </mtr> <mtr> <mtd><mn>i</mn></mtd> <mtd><mn>0</mn></mtd> </mtr> </mtable> <mo>)</mo> </mrow>
erzeugt. Wie man sieht, ist <mtable>
genauso strukturiert wie eine
HTML-Tabelle
<table>
, nur eben jeweils mit dem obligatorischen m
als Präfix
der Elementnamen. Statt der runden Klammern kann man auch beliebige andere Klammern verwenden,
z.B. eckige oder geschweifte Klammern:
<mi>R</mi><mo>(</mo><mi>x</mi><mo>)</mo> <mo>=</mo> <mrow> <mo>[</mo> <mtable> <mtr> <mtd><mi>cos</mi> <mi>x</mi></mtd> <mtd><mo>-</mo><mi>sin</mi> <mi>x</mi></mtd> </mtr> <mtr> <mtd><mi>sin</mi> <mi>x</mi></mtd> <mtd><mi>cos</mi> <mi>x</mi></mtd> </mtr> </mtable> <mo>]</mo> </mrow>
ergibt also .
Die Grenzen von Summen und Integralen werden in MathML durch das Element
<munderover>
ermöglicht.
Es erwartet drei Elemente in der Reihenfolge Symbol (Summe ∑
oder Integral ∫
, ...),
die untere Grenze und die obere Grenze.
Beispielsweise wird die Formel
durch
<munderover> <mo>∫</mo> <mn>1</mn> <mn>e</mn> </munderover> <mfrac><mrow><mo>d</mo><mi>x</mi></mrow><mi>x</mi></mfrac> <mo>=</mo> <mn>1</mn>
implementiert.
Will man eine der Grenzen nicht angeben, so muss an die Stelle ein leeres Element
<mn></mn>
gesetzt werden.
Bei den Grenzen für Summen gibt es eine Besonderheit, hier wird zwischen den
Darstellungsmodi inline und display unterschieden.
Der Quelltext
<munderover> <mo>∑</mo> <mn>1</mn> <mn>2</mn> </munderover> <mfrac><mn>1</mn><mi>k</mi></mfrac> <mo>=</mo> <mn>1,5</mn>
ergibt im Fließtext
,
d.h. die Grenzen sind neben dem Summenzeichen angeordnet.
Möchte man die Grenzen oberhalb und unterhalb von ihm haben, also
,
so kann man das durch Einfügen des Terms in das Element
<mstyle displaystyle="true">
erreichen:
<mstyle displaystyle="true"> <munderover> <mo>∑</mo> <mn>1</mn> <mn>2</mn> </munderover> <mfrac><mn>1</mn><mi>k</mi></mfrac> <mo>=</mo> <mn>1,5</mn> </mstyle>.
Im Gegensatz dazu werden für Formeln im abgesetzten Modus die Grenzen standardmäßig immer ober- und unterhalb angeordnet, wie wir anhand der Gleichungen von Euler und Riemann ersehen. Hierbei ist die Zeta-Funktion, die Menge der Primzahlen, die Gammafunktion und ein Weg in der komplexen Ebene, der bei beginnt, den Ursprung im positiven Sinn einmal umkreist, ohne die Punkte , , ..., zu durchlaufen, und schließlich nach zurückkehrt. Vgl. E.C. Titchmarsh & D.R. Heath-Brown: The Theory of the Riemann Zeta-function. Clarendon Press, Oxford 1986, Eqn. (2.4.2), sowie J. Neukirch: Algebraic Number Theory. Springer-Verlag, Berlin Heidelberg 1999, §VII.1. Der Quelltext dieser Identitäten lautet:
<math mode="display"> <mi>ζ</mi> <mo>(</mo><mi>s</mi><mo>)</mo> <mo>=</mo> <munderover> <mo>∑</mo> <mrow><mi>n</mi><mo>=</mo><mn>1</mn></mrow> <mi>∞</mi> </munderover> <mfrac> <mn>1</mn> <msup><mi>n</mi><mi>s</mi></msup> </mfrac> <mo>=</mo> <munderover> <mo>∏</mo> <mrow><mi>p</mi><mo>∈</mo><mn>ℙ</mn></mrow> <mn></mn> </munderover> <mfrac> <mn>1</mn> <mrow><mn>1</mn><mo>-</mo><msup><mi>p</mi><mrow><mo>-</mo><mi>s</mi></mrow></msup></mrow> </mfrac> <mo>=</mo> <mfrac> <mrow> <msup><mn>e</mn><mrow><mo>-</mo><mn>i</mn><mn>π</mn><mi>s</mi></mrow></msup> <mn> </mn> <mn>Γ</mn><mo>(</mo><mn>1</mn><mo>-</mo><mi>s</mi><mo>)</mo> </mrow> <mrow> <mn>2</mn><mn>π</mn><mn>i</mn> </mrow> </mfrac> <munderover> <mo>∫</mo> <mi>C</mi> <mn></mn> </munderover> <mfrac> <mrow><msup><mi>z</mi><mrow><mi>s</mi><mo>-</mo><mn>1</mn></mrow></msup><mo>d</mo><mi>z</mi></mrow> <mrow><msup><mn>e</mn><mi>z</mi></msup><mo>-</mo><mn>1</mn></mrow> </mfrac> <mn> </mn><mn> </mn> <mo>(</mo><mi>s</mi><mo>∈</mo><mn>ℂ</mn> <mo>,</mo><mn> </mn> <mo>Re</mo><mi>s</mi><mo>></mo><mn>1</mn> <mo>)</mo> </math>
© 2012-2023 Andreas de Vries