Wie man Formeln ohne Web-Engine schnell rendert
Viele Apps schleppen eine komplette Browser-Engine mit sich herum, nur um eine einzige Formel darzustellen. Für mote war dieser Weg versperrt, also mussten wir einen anderen finden.

Für mote gibt es eine unumstößliche Regel. Keine Abhängigkeit von einer Web-Engine.
Beim Erstellen des Prototyps wurde uns etwas klar. Bei solchen Apps macht die integrierte Browser-Engine den Großteil der Kosten aus. Deshalb haben wir beschlossen, sie von Anfang an wegzulassen.
Das Problem waren die Formeln. Normalerweise werden KaTeX oder MathJax in einen Browser geladen, um Formeln darzustellen. Für mote kam diese Methode nicht infrage.
Andere Methoden passten ebenfalls nicht. Mit einem eigenen Font-Renderer unterscheidet sich die Form der Zeichen von der in anderen Apps des Systems. Denn mote sollte alle Zeichen mit der Text-Engine der jeweiligen Plattform darstellen.
Am Ende haben wir uns für den schwierigsten Weg entschieden.
mote übernimmt das Layout, die Plattform die Zeichen
Bei der Formelsyntax haben wir uns an die vertraute Schreibweise gehalten. Innerhalb eines Satzes wird die Formel von einem Paar Dollarzeichen umschlossen, bei einer freistehenden Formel von zwei Paaren.
Direkt nach dem öffnenden und direkt vor dem schließenden Zeichen darf kein Leerzeichen stehen. So werden Geldbeträge wie $5 und $6 nicht fälschlicherweise als Formeln erkannt. In von Menschen geschriebenem Markdown sind solche kleinen Unterscheidungen wichtig.
Die Darstellung von Formeln haben wir in zwei Teile aufgeteilt.
Der Kern von mote berechnet die Positionen der Zeichen und Linien. Die eigentlichen Zeichen zeichnet die Text-Engine der jeweiligen Plattform.
Der Kern enthält eine vereinfachte Fassung der TeX-Satzregeln. Dazu gehören vier Größenstufen, eine Tabelle, die Symbole in acht Klassen einteilt und die Abstände zwischen ihnen festlegt, die Positionen von Indizes, Brüchen und Wurzeln sowie Klammern, die sich an die Größe ihres Inhalts anpassen.
Die tatsächliche Größe der Zeichen bestimmt der Kern jedoch nicht. Denn selbst dasselbe Zeichen hat je nach Schriftart und Plattform eine andere Größe. Wenn der Kern fragt: „Wie groß ist dieses Zeichen, wenn es in dieser Größe dargestellt wird?“, antwortet die Plattform. Auf Grundlage dieses Werts stellt der Kern das Layout fertig, und die Plattform zeichnet die Zeichen und Linien an den festgelegten Positionen.
Dadurch muss auch bei zusätzlichen Plattformen nur ein einziges Layout verwaltet werden.
Auch im Editor bleibt der Originaltext unverändert erhalten. Selbst wenn im Live-Modus eine Formel angezeigt wird, bleiben die Quellbytes innerhalb der Zeile bestehen. An dieser Stelle wird lediglich so viel Platz reserviert, wie die Formel benötigt.
Dadurch steht der Cursor genau an der richtigen Position, und ein angeklicktes Zeichen lässt sich präzise bestimmen. So halten wir uns an den Grundsatz, dass die Darstellung gestaltet werden darf, die Datei aber unverändert bleibt. Der Lesemodus und PDF verwenden ebenfalls dasselbe Layout.

Auch Kursivschrift wird nicht künstlich geneigt. Wir verwenden mathematische Unicode-Zeichen und zeichnen die tatsächlich in der Schriftart enthaltenen mathematischen Glyphen.
Unbekannte Formeln werden nicht verborgen
Wenn Formeln unbemerkt falsch dargestellt werden, ist das schwer zu entdecken.
Wenn ein nicht unterstützter Befehl als Leerstelle angezeigt wird, kann der Benutzer nicht erkennen, ob es sich um einen Tippfehler oder eine Einschränkung der App handelt. Deshalb zeigt mote unbekannte Befehle unter ihrem ursprünglichen Namen in Rot an.
Auch bei nicht zusammenpassenden Klammern bleibt die App nicht stehen. Solche Eingaben werden als Tests festgehalten, damit dasselbe Problem nicht erneut auftritt.
Auch die Leistungsprinzipien haben wir eingehalten. Für jede Kombination aus Formel und Zeichengröße werden bis zu 512 Berechnungsergebnisse gespeichert. Beim Tippen wird dieselbe Formel nicht wiederholt berechnet, und wenn der Benutzer nichts tut, läuft keinerlei Verarbeitung.
Beim Export nach HTML verwenden wir MathML. Da der Browser die Formeln direkt darstellt, ist kein Skript erforderlich. Auch ohne Internetverbindung werden die Formeln unverändert angezeigt.
Es gibt auch Dinge, die noch nicht funktionieren
mote unterstützt nicht den gesamten Funktionsumfang von TeX.
Benutzerdefinierte Befehle, Farbangaben, Formelnummern, mehrzeilige Indizes, Zeichen über Buchstaben und Beschriftungen über Pfeilen werden noch nicht unterstützt.
Auch Akzente, die sich an die Breite anpassen, gibt es nicht. Ein breiter Zirkumflex sieht genauso aus wie ein schmaler. Große Summen- und Integralzeichen werden statt mit speziellen Glyphen in 1,45-facher Größe dargestellt. Auch Klammern, die sich nur vertikal strecken sollten, werden sowohl horizontal als auch vertikal vergrößert.
Inline-Brüche werden wie in TeX klein dargestellt. Sollen sie größer erscheinen, muss dies mit einem eigenen Befehl angegeben werden.
Wir werden nicht behaupten, dass diese Funktionen bereits vorhanden sind. Wenn entsprechende Anfragen kommen, fügen wir sie eine nach der anderen hinzu.
Wegen einer einzigen Formel haben wir nicht die Kostenstruktur der gesamten App verändert. Stattdessen haben wir die Art und Weise verändert, wie Formeln dargestellt werden.
Es war der schwierigere Weg, aber wir glauben, dass es ein Weg ist, der langfristig Bestand haben kann.