MathML-Textcontainer
Nachdem Sie nun eine bessere Vorstellung von MathML haben, konzentrieren wir uns auf Textcontainer (Variablen, Zahlen, Operatoren, ...), die als Bausteine von MathML-Formeln verwendet werden.
Unicode-Zeichen für die Mathematik
Mathematische Formeln beinhalten viele Sonderzeichen, z.B. griechische Buchstaben (z.B. Δ), Fraktur-Buchstaben (z.B. 𝔄), doppelgestrichene Buchstaben (z.B. ℂ), binäre Operatoren (z.B. ≠), Pfeile (z.B. ⇒), Integralzeichen (z.B. ∮), Summenzeichen (z.B. ∑), logische Symbole (z.B. ∀), Begrenzungen (z.B. ⌊) und viele mehr. Der Wikipedia-Artikel Mathematische Operatoren und Symbole in Unicode bietet einen guten Überblick über die verwendeten Zeichen.
Da die meisten dieser Zeichen nicht Teil des Basic Latin Unicode-Blocks sind, wird empfohlen, die Zeichenkodierung Ihres Dokuments anzugeben und es mit entsprechenden Webfonts bereitzustellen. Hier ist eine grundlegende Vorlage zur Verwendung der UTF-8-Kodierung und der Schriftart Latin Modern Math:
<!doctype html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<title>My page with math characters</title>
<link
rel="stylesheet"
href="https://fred-wang.github.io/MathFonts/LatinModern/mathfonts.css" />
</head>
<body>
<p>∀A∊𝔰𝔩(n,𝔽),TrA=0</p>
</body>
</html>
p {
font-family: Latin Modern Math;
}
Ein wenig Semantik
Wir haben im Artikel Einstieg in MathML bemerkt, dass der Text in MathML-Formeln in spezielle Containerelemente wie <mn>
oder <mo>
eingebettet ist. Allgemeiner gesagt, muss jeder Text in MathML-Formeln in solche Containerelemente, sogenannte Token-Elemente, eingeschlossen sein. Darüber hinaus bietet MathML mehrere Token-Elemente, um verschiedene Bedeutungen des Textinhalts zu unterscheiden:
- Das
<mi>
-Element, das einen "Bezeichner" darstellt, der ein symbolischer Name oder beliebiger Text sein könnte. Beispiele:<mi>x</mi>
(Variable),<mi>cos</mi>
(Funktionsname) und<mi>π</mi>
(symbolische Konstante). - Das
<mn>
-Element stellt ein "numerisches Literal" oder andere Daten dar, die als numerisches Literal gerendert werden sollten. Beispiele:<mn>2</mn>
(Ganzzahl),<mn>0.123</mn>
(Dezimalzahl) oder<mn>0xFFEF</mn>
(hexadezimaler Wert). - Das
<mo>
-Element stellt einen Operator oder etwas dar, das als Operator gerendert werden sollte. Beispiele<mo>+</mo>
(binäre Operation),<mo>≤</mo>
(binäre Relation),<mo>∑</mo>
(Summationszeichen) oder<mo>[</mo>
(Begrenzer). - Das
<mtext>
-Element wird verwendet, um beliebigen Text darzustellen. Zum Beispiel kurze Wörter in Formeln wie<mtext>if<mtext>
oder<mtext>maps to</mtext>
.
Aktives Lernen: Erkennen von Token-Elementen
Unten sehen Sie ein komplexeres Beispiel, das sagt, dass der Absolutwert einer reellen Zahl gleich dieser Zahl ist, wenn und nur wenn sie nicht negativ ist. Erkennen Sie die verschiedenen Token-Elemente und wofür sie verwendet werden. Jedes Mal, wenn Sie auf den entsprechenden Text klicken, wird er hervorgehoben und eine Bestätigungsmeldung wird angezeigt.
Lesen Sie schließlich die MathML-Quelle, um zu überprüfen, ob dies Ihren Erwartungen entspricht:
<math display="block">
<mrow>
<mrow>
<mo>|</mo>
<mi>x</mi>
<mo>|</mo>
</mrow>
<mo>=</mo>
<mi>x</mi>
</mrow>
<mtext> iff </mtext>
<mrow>
<mi>x</mi>
<mo>≥</mo>
<mn>0</mn>
</mrow>
</math>
Hinweis:
Es ist manchmal schwierig zu entscheiden, welches Token-Element für einen bestimmten Textinhalt verwendet werden soll. In der Praxis sollte die Wahl des falschen Elements keine größeren Probleme verursachen, da alle Token-Elemente im Allgemeinen von Browserimplementierungen gleich gerendert werden (für visuelle Anzeige und für unterstützende Technologien). Jedoch haben die <mi>
- und <mo>
-Elemente spezielle Unterscheidungsmerkmale, die beachtet werden sollten. Sie werden in den folgenden Abschnitten erklärt.
Automatische Kursivschrift von <mi>
Eine typografische Konvention in der Mathematik besteht darin, Kursivbuchstaben für Variablen zu verwenden. Um dies zu erleichtern, können <mi>
-Elemente mit einem einzelnen Zeichen automatisch kursiv gerendert werden. Dies gilt für alle Buchstaben der lateinischen und griechischen Alphabete. Vergleichen Sie die Darstellung der beiden <mi>
-Elemente in der folgenden Formel:
<math>
<mi>sin</mi>
<mi>x</mi>
</math>
Hinweis:>Diese Tabelle aus MathML Core enthält die vollständige Liste der Zeichen, die kursiv dargestellt werden, zusammen mit den entsprechenden Kursivzeichen.
Rückgängigmachen der automatischen Kursivschrift von <mi>
Um diese standardmäßige kursive Transformation rückgängig zu machen, können Sie ein mathvariant="normal"
-Attribut am <mi>
-Element anhängen.
Vergleichen Sie die Darstellung der Großbuchstaben Gamma in der folgenden Formel:
<math>
<mi>Γ</mi>
<mi mathvariant="normal">Γ</mi>
</math>
Hinweis: Obwohl Sie diese Transformation anwenden können, würden Sie normalerweise einfach die gewünschten Mathematischen Alphanumerischen Symbole verwenden.
Operator-Eigenschaften von <mo>
MathML enthält ein Operator-Wörterbuch, das die Standardeigenschaften von <mo>
-Elementen je nach Inhalt und Position innerhalb ihres Containers (Präfix, Infix oder Postfix) definiert. Betrachten wir ein konkretes Beispiel:
<table>
<tr>
<td>Prefix plus</td>
<td>
<math>
<mo>+</mo>
<mi>i</mi>
</math>
</td>
</tr>
<tr>
<td>Infix plus</td>
<td>
<math>
<mi>j</mi>
<mo>+</mo>
<mi>i</mi>
</math>
</td>
</tr>
<tr>
<td>Prefix sum</td>
<td>
<math>
<mo>∑</mo>
<mi>i</mi>
</math>
</td>
</tr>
</table>
Dieses Beispiel sollte ähnlich wie der untenstehende Screenshot gerendert werden. Beachten Sie den Abstand zwischen den <mi>i</mi>
-Elementen und ihrem vorhergehenden <mo>
: kein Abstand für das Präfix-Plus, ein gewisser Abstand für das Infix-Plus und ein kleinerer Abstand für das Präfix-Summationszeichen.
Operatoren haben viele andere Eigenschaften, die wir später ausführlicher sehen werden. Merken Sie sich vorerst, dass Sie einen <mo>
-Container für Zeichen im Operator-Wörterbuch verwenden sollten und die Unterausdrücke korrekt mit <mrow>
-Elementen gruppieren sollten, um MathML-Renderer zu unterstützen.
Aktives Lernen: Den Unterschied erkennen
Jetzt, da Sie sich etwas mit den besonderen Merkmalen von <mi>
und <mo>
auskennen, schreiben wir das <p>
-Element im Beispiel oben auf der Seite mit etwas tatsächlichem MathML um. Vergleichen Sie die visuelle Darstellung in Ihrem Browser und erklären Sie die Unterschiede zur reinen Textversion.
<!doctype html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<title>My page with math characters</title>
<link
rel="stylesheet"
href="https://fred-wang.github.io/MathFonts/LatinModern/mathfonts.css" />
</head>
<body>
<p class="text">∀A∊𝔰𝔩(n,𝔽),TrA=0</p>
<p>
<math>
<mo>∀</mo>
<mrow>
<mi>A</mi>
<mo>∊</mo>
<mrow>
<mi>𝔰𝔩</mi>
<mrow>
<mo>(</mo>
<mi>n</mi>
<mo>,</mo>
<mi>𝔽</mi>
<mo>)</mo>
</mrow>
</mrow>
</mrow>
<mo>,</mo>
<mrow>
<mrow>
<mi>Tr</mi>
<mi>A</mi>
</mrow>
<mo>=</mo>
<mn>0</mn>
</mrow>
</math>
</p>
<input id="showSolution" type="button" value="Show solution" />
<div id="solution"></div>
</body>
</html>
Hinweis: Ein offensichtlicher Unterschied ist, dass der Quellcode mit MathML viel ausführlicher geworden ist. Denken Sie daran, dass es in diesem Tutorial darum geht, die Sprache zu lernen, aber in der Praxis wird MathML-Inhalt im Allgemeinen nicht manuell geschrieben. Weitere Informationen finden Sie auf der Seite MathML-Authoring.
Aktives Lernen: Dehnbare Operatoren
Das Operator-Wörterbuch definiert eine Standard-dehnbare Eigenschaft sowie die entsprechende Dehnungsachse für einige Operatoren. Zum Beispiel kann ein Operator standardmäßig vertikal gedehnt werden, um die maximale Höhe nicht dehnbarer Geschwister innerhalb seines <mrow>
-Containers abzudecken. Indem man das vorherige Beispiel ein wenig anpasst, kann man Operatoren vertikal dehnen. Können Sie sie finden?
Wie immer sind Sie eingeladen, den Quellcode zu lesen, wenn Sie fertig sind:
<math display="block">
<mrow>
<mrow>
<mo>|</mo>
<mfrac>
<mn>1</mn>
<mi>x</mi>
</mfrac>
<mo>|</mo>
</mrow>
<mo>=</mo>
<mfrac>
<mn>1</mn>
<mrow>
<mo>|</mo>
<mi>x</mi>
<mo>|</mo>
</mrow>
</mfrac>
<mo>=</mo>
<mfrac>
<mn>1</mn>
<mi>x</mi>
</mfrac>
</mrow>
<mtext> iff </mtext>
<mrow>
<mi>x</mi>
<mo>≥</mo>
<mn>0</mn>
</mrow>
</math>
Warnung: Besondere Mathe-Schriftarten sind im Allgemeinen erforderlich, um diese Dehnung zu ermöglichen, das vorherige Beispiel stützt sich auf Webfonts.
Zusammenfassung
In diesem Artikel haben wir einige Token-Elemente kennengelernt, die als Textcontainer sowie deren unterschiedliche Semantiken verwendet werden, nämlich <mi>
(Bezeichner), <mn>
(Zahlen), <mo>
(Operatoren), <mtext>
(allgemeiner Text). Wir haben spezielle Unicode-Zeichen gesehen, die häufig in mathematischen Formeln vorkommen, und einen Überblick über einige beobachtbare Verhaltensweisen der <mi>
- und <mo>
-Elemente gegeben. Im nächsten Artikel werden wir sehen, wie man auf Token-Elemente zurückgreift, um viel komplexere Ausdrücke wie Brüche und Wurzeln zu erstellen.