0 Daumen
2,8k Aufrufe

Hallo liebe Mitglieder,

ab sofort ist Katex auf der Mathelounge aktiviert. MathJax 2 wird nicht mehr verwendet.

Katex gilt als die derzeit schnellste Javascript-Library für das Textsatzsystem Latex.

Einige Vorteile (Quelle: katex.org):

  • Schnell: KaTeX rendert Mathematik synchron und muss die Seite nicht neu scannen.
  • Druckqualität: Das Layout von KaTeX basiert auf Donald Knuths TeX, dem Goldstandard für mathematischen Satz.
  • In sich geschlossen: KaTeX hat keine Abhängigkeiten und kann problemlos mit Website-Ressourcen gebündelt werden.

Demo zum Vergleich von Katex und Mathjax: https://www.intmath.com/cg5/katex-mathjax-comparison.php

Process KaTeX 208 ms
Process MathJax 4908 ms

Das ist ein schlagendes Argument.

Darüber hinaus war es uns nicht möglich, MathJax selbst zu hosten, sondern wir nutzten Cloudflare.

Mit Katex ist das Hosten problemlos selbst möglich. Das heißt, kein Request geht an einen amerikanischen Server (ein eventuelles Tracking ist nicht mehr möglich). Die Requests gehen alle an unsere eigenen Server.


Wichtig:

(1) Katex hat einige Einschränkungen, siehe auch Supported Functions. Das heißt, es kann vorkommen, dass Latex in bestehenden Posts korrigiert werden muss.

Sammlung von Korrekturen:

  • \begin{align}\begin{aligned}
  • \eqalign{ ... }\begin{aligned} ... \end{aligned}
  • \pmatrix{ ... } ⟶ \begin{pmatrix} ... \end{pmatrix}
  • \matrix{ ... }\begin{matrix} ... \end{matrix}
  • \bbox[#ff88ff, 1px]{1} ⟶ nun über \colorbox{#ff88ff}{1}
  • \color{red}\textcolor{red}, da color sonst alle folgenden Zeichen färbt
  • \mathrmLaTeX\mathrm{\LaTeX}
  • \require{cancel} ⟶ wird nicht mehr benötigt, da in Katex enthalten
  • \mbox{ ... } → nun über \text{ ... }
  • \begin{gather} ... \end{gather} → \begin{aligned} ... \end{aligned}
  • \enclose{ ... }\cancel{ ... }
  • \begin{equation} ... \end{equation} → \begin{aligned} ... \end{aligned}
  • \begin{equation*} ... \end{equation*} → \begin{aligned} ... \end{aligned}
  • \text{%} → \text{\%} (Prozentzeichen muss escaped werden)
  • \cases{ ... }\begin{cases} ... \end{cases}
  • \ → alleinstehende Backslashes entfernen
  • \stackrel{...} ... → hier muss zwingend die zweite Klammer gesetzt werden: \stackrel{...} {...}
  • für mehrfaches Superscript muss jede Basis umklammert werden, also z. B. {{x}^{y}}^z
  • folgt ein Latexbefehl nach einem Superscript, muss dieser umklammert werden, also z. B. x^{\sqrt{2}}
  • \dddot{x} → 3 Punkte über Buchstaben, Workaround über \stackrel{...}{x}
    \im\operatorname{im}

Bitte kommentiert unten, wenn ihr nicht-gerendertes Latex seht, damit wir die Änderungen dokumentieren und vornehmen können.

(2) Automatische Zeilenumbrüche funktionieren in Katex wie folgt:

KaTeX 0.10.0+ will insert automatic line breaks in inline math after relations or binary operators such as “=” or “+”. These can be suppressed by \nobreak or by placing math inside a pair of braces, as in {F=ma}. \allowbreak will allow automatic line breaks at locations other than relations or operators. Hard line breaks are \\ and \newline.

(3) Hinweise zu Bearbeitungen:

  • Automatisiert: Das {align} bei \begin{align} (und \end{align}) wurde in 795 Posts ersetzt mit {aligned}.
  • Automatisiert: Das {align*} wurde in 279 Posts ersetzt mit {aligned}.
  • Händisch: \require{cancel} wurde händisch ersetzt in ca. 40 Posts.
  • Automatisiert: Das \mbox wurde in 772 Posts ersetzt mit \text.
  • Automatisiert: \left(und right) wurden in 529 Posts ersetzt mit \left( und \right).
  • Weitere Bearbeitungen siehe Aktion: Hilfe beim Bearbeiten von Latex in Posts


PS I: Der Latex-Assistent nutzt nun ebenfalls Katex.

PS II: Sehr hilfreich ist Symbols and Functions in KaTeX (available and not available)


Nachtrag:

Wir haben das Parsen durch Katex um eine Preprozessor ergänzt, der mehrfache Whitespaces (im HTML als &nbsp zu erkennen) zu einem einfachen Leerzeichen (also nicht HTML-Zeichen) umwandelt. Dadurch kommt es zu wesentlich weniger Katex-Fehlern. Code hierzu ist (Übergabe als Option bei Katex): preProcess: (math) => math.replace(/\xa0/g, ' '),

geschlossen: News
von mathelounge
Avatar von 2,3 k

Eckige Klammern gehen nicht mehr.

\[\frac ac\]

\[\frac ac\]

Aber:

\(frac ac\)

\(\frac ac\)


P.S.: Ich habe gerade die align und align* durch aligned ersetzt. Hat überall gut gefunzt, nur hier nicht:

https://www.mathelounge.de/549616/zufallsgrosse-standardnormalverteilt-wahrscheinlichkeit?show=549650#a549650

Laut dem Latex-Assisstenten ist aber alles in Ordnung?!

Eckige Klammern direkt in Latex eingeben: [ \frac{a}{c} ] wird zu: \( [ \frac{a}{c} ] \)

Falls du die Latexklammern meinst (für den Parser), ja, bitte nie [/ verwenden.

Zum problematischen Post: Wurde behoben. Sollte jetzt überall klappen.

Katex hat einige Einschränkungen, ...

JOh! - da gibt es nun eine Menge Arbeit und das im wesentlichen mit meinen Antworten uind Kommentaren.

Es hat auch Vorteile, wenn viele kein LaTeX benutzen ;-)

@Werner da hast du Recht. Bei mir war es auch etwas Aufwand, weil ich alle Färbungen und align-Umgebungen umwandeln musste.

Ich habe auch in meinen Posts alle aligns ausgetauscht und \color zu \textcolor gemacht.

Danke.

@Werner-Salomon: Bei dir betrifft es meist die bbox. Das muss leider händisch geändert werden, da die Syntax \bbox[#FF0000]{} ist (eckige Klammern) und die andere \colorbox{#F00}{}. Auch ist bbox manchmal mit Border-Thickness wie \bbox[#FF0000, 1pt]{} angegeben.

Ich könnte das automatisiert über eine RegEx versuchen, das ist aber nicht so einfach. Warte bitte noch ein wenig hierzu.

@Werner da hast du Recht. Bei mir war es auch etwas Aufwand, ...

Du bist gut!! bei Deinen paar Antworten. Bei mir sind grob geschätzt womöglich an die 2000 Posts zu korrigieren! (Antworten und Kommentare)

@Doesbaddel: gibt es bei LaTeX keine Standardisierung? Zumindest einen Satz von Kommandos, wo man sich darauf verlassen kann, dass das 'überall' funktioniert?

Das bbox kommt in aktuell 195 Posts vor.

@Werner das liegt leider an den unterschiedlichen Ausführungen durch Mathjax, Katex etc.. Eigentlich ist MathJax und Co. eine browserübergreifende JavaScript-Bibliothek und demnach nicht wirklich eine LaTeX-Umgebung.
Normalerweise kannst du in deinem LaTeX-Dokument auf dem PC mit einer installierten TeX-Distribution ganz einfach neue Pakete einbinden, falls LaTeX diese standardmäßig nicht unterstützt. Dann zeigt dir der Compiler einen kleinen Hinweis an, dass der gewählte Befehl nicht erkannt/unterstützt ist und du weißt sofort, dass du zum Beispiel für die align-Umgebung das amsmath-Paket einbinden musst, damit es funktioniert. Dafür musst du vorher aber auch eine große TeX-Distribution installiert haben, zum Beispiel MiKTeX. In diesem sind all diese Pakete vorinstalliert. Das geht leider in den browserübergreifenden JavaScript-Bibliotheken wie Mathjax nicht. Es soll ja schließlich ohne weitere Software in jedem Browser laufen. Deshalb werden dort nur ausgewählte Befehle unterstützt. Leider legen auch unterschiedliche Systeme unterschiedlichen Wert auf verschiedene Befehle - weshalb es sein kann, dass eine Umgebung in Mathjax unterstützt wird und in KaTeX aber nicht.

\eqalign funktioniert nicht mehr.

Ist mir bei einer von Werners Antworten aufgefallen.

:-)

Das \eqalign kommt in ca. 200 Posts vor.

Auch hier haben wir das Problem, dass sich die Formen unterscheiden:

\eqalign{ 123 }

Hingegen neue Variante:

\begin{align} 123 \end{align}

Also auch hier ist händisch nachzubessern.

Per Rechtsklick auf eine \(\LaTeX\)-Kreation konnte man immer unter "Shows Math as" und anschließend unter "Tex Commands", den Code anzeigen - geht das mit KaTeX nicht mehr?

blob.png

Update: Dafür kann man viel besser, wie normalen Text, den Tex-Code markieren und einfügen. Also es werden auch Zeichen wie \(\subseteq\) richtig kopiert.

@mathelounge könnte man nicht all diese Probleme mithilfe von regulären Ausdrücken eliminieren? Zum Beispiel: \color{red} durch \textcolor{red}, \eqalign{123} durch \begin{eqalign}123\end{eqalign} etc. ersetzen. Das würde dann auch alle zukünftigen Posts betreffen und Mitglieder müssten ihren Schreibstil und die Befehle nicht ändern.

Gerade diese Extension eingebaut: https://github.com/KaTeX/KaTeX/tree/master/contrib/copy-tex

Vorgehen zum Latex-Kopieren:

1. Klick auf Latex-Formel.

2. Strg+C oder rechte Maustaste > Kopieren

3. Strg+V zum Einfügen in eigenen Post.

Zum Testen (Cache vorher leeren bzw. Strg+F5 drücken):

\( \frac{1}{x} + \text{Mathelounge} = \infty \)



2020-10-20-screenrecording.gif


@Doesbaddel: Teilweise ja. Bei zum Beispiel \eqalign{123 .... {}{} ... x } weiß man jedoch nicht, was die schließende Klammer ist. Denn da müssten die Klammern gezählt werden, bis zur letzten eqalign-Klammer, die dann mit \end{aligned} ersetzt werden müsste. Sehr komplex und vor allem: Wer garantiert, dass die Klammern richtig gesetzt wurden.

bbox hingegen wäre etwas einfacher mit RegEx zu lösen.

Neu entdeckt: \mbox{ ... } (wird nicht von Katex unterstützt)

Ich würde dies automatsiert mit \text{ ... } ersetzen (in 772 Posts).

Einwände? Es scheint in Ordnung zu sein, vgl. https://stackoverflow.com/a/1239851/1066234


PS:

An \mbox within math mode does not use the current math font; rather it uses the typeface of the surrounding running text.

The text in the box is in LR mode which prevents it from being broken across lines.
Ich würde dies automatsiert mit \text{ ... } ersetzen (in 772 Posts).
Einwände?

Nein keine Einwände - \mbox hatte ich früher benutzt. Aktuell nehme ich auch \text

Vielen Dank. Ersetzt bzw. erledigt. :)

@mathelounge: bitte nicht \begin{array}durch \begin{aligned} ersetzen. Das macht defintiv was anderes und macht eine Tabelle u.U. unlesbar.

So geschehen hier: https://www.mathelounge.de/540635.

KaTeX hat den Ausdruck nicht gerendert, da hinter \begin{array} eine leere Klammer gefehlt hat. Das musste heißen: \begin{array}{} - mehr nicht.

Danke für die Korrektur und den Hinweis.

Aloha :)

Brüche als Komponenten von Vektoren sehen nun auf Firefox grauenhaft aus:$$\begin{pmatrix}\frac{14}{3}\\\frac{10}{3}\\\frac{4}{3}\end{pmatrix}$$Es fehlt ein kleiner Abstand zwischen den einzelnen Komponenten.

@Tschaka, ja sieht bei Chrome und Edge auch so aus. Also wahrscheinlich browserunabhängig.
Ich hatte gestern argumentiert, dass manche Formeln zu groß sind im Vergleich zum Rest des Textes und zu Fließtext-Formeln. Kai hatte daraufhin dann die globale Schriftgröße abgeändert, vielleicht ist das die Ursache. Dann war es meine Schuld.

Bei einem Vektor mit Brüchen gibt es keine newlines, auf die das CSS Einfluss haben könnte. Die Zeilenhöhe ist 150%, hat hierauf aber keinen Einfluss!

Das Problem ist hier benannt: https://github.com/KaTeX/KaTeX/issues/312

Workaround: Zeilenabstände definieren per:

\( \begin{pmatrix} \frac{14}{3} \\[1ex] \frac{10}{3} \\[1ex] \frac{4}{3} \end{pmatrix} \)

Ergibt gerendert:

\( \begin{pmatrix} \frac{14}{3} \\[1ex] \frac{10}{3} \\[1ex] \frac{4}{3} \end{pmatrix} \)

Ah ok, mit dem Workaround kann ich für die Zukunft gut leben. Aber was ist mit den alten Postings, die ebenfalls solche Latex-Konstruktionen beinhalten? Müssen die jetzt alle "repariert" werden?

Defacto ja. Da führt kein Weg drum herum. Oder so belassen und andere müssen es halt heranzoomen.

Ein weiterer Workaround wäre $$\begin{pmatrix} 14/3 \\ 10/3 \\ 4/3 \end{pmatrix}$$ oder $$\begin{pmatrix} 14 \\ 10 \\ 4 \end{pmatrix}\cdot \frac{1}{3}.$$

Neu:

Anzeige von Latex-Render-Fehlern (via Katex) nun direkt unten rechts auf der Webseite. Beispiel:

blob.png


Neue Seite für Moderatoren und Redakteure zum Erkennen und Korrigieren von Latex-Fehlern: https://www.mathelounge.de/latexproblems

blob.png

Nun weiß ich nicht mehr, wie man mit Katex eine Polynomdivision formatiert. Das ging unter MathJax noch recht gut mit alignat - und sah so aus:

blob.png

(siehe https://www.mathelounge.de/706805)

und nun?

Was ist mit dem aligned?

$$\begin{aligned} (&-5x^3 &+ &21x^2 &+ &0x &- &16) \div (x-1) = -5x^2 + 16x + 16 \\ -(&-5x^3 &+ &5x^2) \\ \hline & & &16x^2 &+ &0x \\ & & -(&16x^2 &- &16x) \\ \hline & & & & &16x &- &16 \\ & & & & -(&16x &- &16) \\ \hline & & & & &0 \\ \end{aligned}$$


\begin{aligned} (&-5x^3 &+ &21x^2 &+ &0x &- &16) \div (x-1) = -5x^2 + 16x + 16 \\ -(&-5x^3 &+ &5x^2) \\ \hline & & &16x^2 &+ &0x \\ & & -(&16x^2 &- &16x) \\ \hline & & & & &16x &- &16 \\ & & & & -(&16x &- &16) \\ \hline & & & & &0 \\ \end{aligned}

Was ist mit dem aligned?

Da sind eben die horizontalen Abstände so groß ... wenn man dann ein Polynom 4.Ordung durch eines mit 3.Ordnung dividiert wird es auf der Seite schon eng.

Abstände statt mit \\ mit \\[1ex] oder \\[15pt] setzen.

Ich schrieb:

Da sind eben die horizontalen Abstände so groß ...

also die zwischen den 'Spalten', bzw. vor dem + bzw. Minus  ;-)

Abstände statt mit \\ mit \\[1ex] oder \\[15pt] setzen. Vielleicht hilft das?

Außerdem will ich ja genau dies NICHT machen. Das ist doch die Arbeit eines Text-Setz-System wie LaTeX. Idealerweise macht man sowas wie

\begin{division} .. & .. \\ .. \end{division}
und das System macht einfach 'alles richtig'.

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community