Upgrade auf neues Mathe-Plugin

Ich habe immer noch das alte “Discourse Mathjax”-Plugin installiert. Hat jemand seine Beiträge erfolgreich in die neue Plugin-Version konvertiert? Könnten Sie bitte einen funktionierenden Befehl posten?

Die beiden Plugins sind nicht zu 100 % kompatibel, da einige Inhalte fehlerhaft angezeigt werden, wenn ich nur das neue Plugin aktiviere.

Zum Beispiel erfordert das neue Plugin doppelte $$ vor und nach \\begin{...}...\\end{...}-Blöcken. Zum Beispiel wird \\begin{align}...\\end{align} (ohne doppelte $$) mit dem alten Plugin als Mathematik gerendert, mit dem neuen jedoch nicht.

Um diese zu konvertieren, würde ich den gesamten Inhalt scrapen und eine Regex-Suche-Ersetzung durchführen, um die doppelten $$ vor/nach \\begin{..}/\\end{..} einzufügen/anzuhängen (aber verschachtelte Blöcke wären ein Problem). Möglicherweise gibt es andere Fälle, in denen Inhalte fehlerhaft angezeigt werden, die ich noch nicht entdeckt habe (es ist ein 5 Jahre altes Forum mit viel Mathematik).

1 „Gefällt mir“

Nun, ich habe mehr ausgegeben, als ich zugeben möchte, um fehlerhafte Inhalte nach dem Upgrade auf das neue Mathe-Plugin zu konvertieren und zu reparieren. Daher poste ich hier die wichtigen Befehle, die ich verwendet habe (entschuldigen Sie die hässliche Bastelei, ich war zu faul). Einige manuelle Korrekturen des Inhalts waren immer noch notwendig, aber in unserem Fall nicht so viel.

HINWEIS: Dies dient der Inspiration. Erinnern Sie sich an das Gedicht „Ich übernehme keine Verantwortung…“. Führen Sie dies nicht blind aus, wenn Sie es nicht verstehen.

# Ersetzt \\\\ durch \\ (was auch \\\\\\\\ in \\\\ übersetzt)
Post.where('raw ~ ?', "\\\\\\\\").each{|p| p.raw=p.raw.gsub(/\\\\\\\\/, "\\\\"); p.save; print "."; $stdout.flush;}; puts "";

# Ersetzt {align} durch {aligned} und entfernt alle Sternchen-Versionen
Post.where('raw ~ ?', "\\\\begin\\{align").each{|p| p.raw=p.raw.gsub(/(begin|end)\\{align.*?\\}/, "\\\\1{aligned}"); p.save; print "."; $stdout.flush;}; puts "";

# Ersetzt {array} durch {matrix} und entfernt alle Sternchen-Versionen
Post.where('raw ~ ?', "\\\\begin\\{array").each{|p| p.raw=p.raw.gsub(/(begin|end)\\{array\\*?\\}/, "\\\\1{matrix}"); p.save; print "."; $stdout.flush;}; puts "";

# Ersetzt `\begin{equation}` durch `$$`
Post.where('raw ~ ?', "\\\\begin\\{equation").each{|p| p.raw=p.raw.gsub(/\\s*\\\\(begin|end)\\{equation\\*?\\}\\s*/, "$$"); p.save; print "."; $stdout.flush;}; puts "";

# Fügt neue Zeilen vor und nach `$$` ein
Post.where('raw ~ ?', "\\$\\$").each{|p| p.raw=p.raw.gsub(/\$\$/,"\\n$$\\n"); p.save; print "."; $stdout.flush;}; puts "";

# Fügt `$$` vor und nach `{aligned}`-Blöcken ein
Post.where('raw ~ ?', "\\\\begin\\{align").each{|p| p.raw=p.raw.gsub(/\\s*(\\\\begin\\{align)/m,"\\n$$\\n\\\\1").gsub(/(\\\\end\\{align.*?\\})\\s*/m,"\\\\1\\n$$\\n"); p.save; print "."; $stdout.flush;}; puts "";

# ... doppelte `$$` in `{aligned}` korrigieren
Post.where('raw ~ ?', "\\\\begin\\{aligned").each{|p| p.raw=p.raw.gsub(/(\\\\end\\{align.*?\\}\\n\\$\\$)\\n\\$\\$/,"\\\\1").gsub(/\\$\\$\\n(\\$\\$\\n\\\\begin\\{align)/,"\\\\1"); p.save; print "."; $stdout.flush;}; puts "";

## Wenden Sie die obigen beiden Befehle auf andere Umgebungen an, die Sie möglicherweise neben {aligned} haben

# MANUELLE KORREKTUR EMPFOHLEN FÜR FOLGENDE:
# Beiträge, bei denen `$$` in zitierten `> ` Umgebungen vorkommen. Nur das öffnende und
# schließende `$$` müssen mit einem Präfix versehen werden, d. h. `> $$`, der Inhalt dazwischen darf nicht
# oder es wird als mathematische Größer-als-Zeichen gerendert.
# Führen Sie dies aus, um die Beiträge zu identifizieren:
Post.where('raw ~ ?', ">\\s*\\n\\s*\\$\\$").each{|p| puts "https://discourse.domain.com/p/#{p.id}";};

# ... ODER führen Sie dies aus, um eine automatische Korrektur zu versuchen, wenn auch riskant
# (hat für uns gut funktioniert, ein paar Beiträge benötigten weitere manuelle Arbeit):
Post.where('raw ~ ?', ">\\s*\\n\\s*\\$\\$").each{|p| p.raw=p.raw.gsub(/(\u003e\s*)\$\$(.*?)\$\$\s*?\n/m,"\\1\u003e $$\\2\u003e $$\n\u003e"); p.save; print "."; $stdout.flush;}; puts "";

# Kosmetisch, optional: 3+ aufeinanderfolgende neue Zeilen durch 2 neue Zeilen ersetzen
Post.where('raw ~ ?', "\\n{3,}").each{|p| p.raw=p.raw.gsub(/\n{3,}/,"\n\n"); p.save; print "."; $stdout.flush;}; puts "";

# Optional: 2+ aufeinanderfolgende neue Zeilen vor und nach `$$` ersetzen
# mit einer einzelnen neuen Zeile
# WARNUNG: In der aktuellen Version des Plugins in Ordnung, aber es kann
# in einer zukünftigen Version anders angezeigt werden (?). Zum Beispiel in echtem Latex, eine leere Zeile
# nach $$ vor Text macht einen Unterschied im vertikalen Abstand.
Post.where('raw ~ ?', "\\n\\$\\$\\n{2,}|\\n{2,}\\$\\$").each{|p| p.raw=p.raw.gsub(/\n\$\$\n{2,}/,"\n$$\n").gsub(/\n{2,}\$\$/,"\n$$"); p.save; print "."; $stdout.flush;}; puts "";
2 „Gefällt mir“

@sam Da dieses Plugin jetzt offiziell ist, könnten wir bitte auch die „Zitat“-Funktion richtig zum Laufen bringen? Wenn man Text mit Mathematik auswählt und dann auf die Schaltfläche „Zitat“ klickt, erhalte ich derzeit die gesamte Mathematik gestrippt und verdoppelt. Der JavaScript-Code für die „Zitat“-Funktion könnte die HTML-Tags für Mathematik erkennen und die benötigten $ und/oder $$ in das Bearbeitungsfeld einfügen, anstatt sie zu strippen und den Mathematik-String zu verdoppeln.

Außerdem denke ich, es wäre schön, eine aktuellere Version von Katex in das Plugin zu bündeln. Die gebündelte Version ist über 2 Jahre alt (0.11), während Katex stabil 0.15.2 ist, was umfangreicher ist und viele Fehler behoben hat. Mir ist die readme bewusst, aber nur wenige Leute werden sich die Mühe machen.

Mathjax 3.x wäre auch schön (viel schneller als 2.7)

EDIT: Es gibt ein viel einfacheres Upgrade des gebündelten Katex, das Katex nicht aus Quellen bauen muss. Holen Sie sich einfach das Tarball, kopieren Sie die Dateien, ersetzen Sie den Schriftordner im CSS.

wget -O- https://github.com/KaTeX/KaTeX/releases/latest/download/katex.tar.gz | tar -zx
cp katex/fonts/*.woff* /pfad/zu/discourse/plugins/discourse-math/public/katex/fonts/
cp katex/katex.min.* katex/contrib/mhchem.min.js /pfad/zu/discourse/plugins/discourse-math/public/katex/
sed -i "s~url(fonts/~url(/plugins/discourse-math/katex/fonts/~g" /pfad/zu/discourse/plugins/discourse-math/public/katex/katex.min.css
5 „Gefällt mir“

Das klingt alles großartig, gibt es eine Chance, dass Sie dafür einige PRs einreichen können?

3 „Gefällt mir“

Erstellt einen PR zum Aktualisieren von KaTeX und hat ihn auch auf die neueste Version aktualisiert. Benutze MathJax selbst nicht, also habe ich mich noch nicht darum gekümmert. Letztendlich möchte Discourse möglicherweise das Verknüpfen mit einem CDN für diese (erlaube dem Benutzer, die URL anzugeben, damit er eine Release-Version festlegen kann, wenn er möchte; Standard ist der aktuelle Host) zulassen, auch wenn dies ein wenig gegen das Discourse-Ethos verstößt, da diese Bibliotheken sehr oft mit Korrekturen und Ähnlichem aktualisiert werden.

Leider keine Zeit für einen PR für die Korrektur der “Zitat”-Funktion – zu überhäuft mit Arbeit in diesen Tagen, weshalb ich eine Nachricht hinterlassen habe, in der Hoffnung, dass jemand anderes sich darum kümmert.

4 „Gefällt mir“

Vielen Dank für den PR @nordize, habe ihn gemerged!

5 „Gefällt mir“

Ich erinnere mich, dass dieser Thread viele Nachrichten und Diskussionen enthielt – was ist passiert?

Ich wollte einige Notizen zu meinem letzten Beitrag hinzufügen, den ich Anfang des Jahres gemacht habe, sowie eine Verbesserung, die es Makros ermöglicht, zwischen mathematischen Ausdrücken mit Katex zu bestehen (siehe hier). Bin ich im falschen Thread?

Die Beiträge in diesem Thema werden automatisch gelöscht, aber ich kann sie heraussuchen, wenn Sie sie in ein Thema im Stil von „Tipps und Tricks“ verschieben möchten?

Warum zum Teufel?!? Dieses Plugin ist wichtig und eines der beliebtesten. Die Diskussion in diesem Thema enthielt viele interessante Beiträge. Ich habe mindestens eine Anleitung in einem Beitrag geschrieben und darauf vertraut, dass sie zum Nachschlagen vorhanden sein wird. Ich und meine Kollegen haben sogar einige der Beiträge als Lesezeichen markiert … und jetzt ist alles weg?

Das ist eine sehr seltsame Entscheidung. War es nicht einer der Zwecke von Discourse, lange Themen bewältigen zu können (adaptive Ladung und all das usw.)? “Löschen” … sicherlich haben wir keinen Platzmangel! In der heutigen Zeit ist die Erhaltung von Informationen wichtiger. Ich verstehe solche Entscheidungen wirklich nicht, da wir nicht mehr in den 1990er Jahren leben, und es bedeutet im Grunde, dass die Last immer noch auf dem Einzelnen liegt, Informationen zu speichern und sich zu bemühen, sie aus lokalen Quellen zu teilen, da sie jederzeit von dort verschwinden kann, wo sie online gepostet wurde, was Verschwendung, Ärger, unnötige Aufmerksamkeit und Organisation fördert und Vertrauen und Zuverlässigkeit verringert. Die Unterstützung von Community-Benutzern wird ebenfalls ineffizient und problematisch, wenn Informationen nach 1 Monat gelöscht werden. Dies widerspricht einigen Zwecken. Wir sollten in die entgegengesetzte Richtung gehen.

Es ist keine lebenswichtige Angelegenheit, offensichtlich möchte ich die Dinge nicht übertreiben, aber trotzdem … Könnten Sie es vollständig zurückbringen und diese 1-Monats-Richtlinie für die Zukunft vielleicht überdenken?

Übrigens, @sam - Ich habe diesen PR erstellt: katex: enable persistent macros by qnxor · Pull Request #51 · discourse/discourse-math · GitHub, den ich zur Zusammenführung ermutige, da Mathjax dies standardmäßig hat, sodass Personen, die zwischen Mathjax und Katex wechseln, fehlerhafte Inhalte haben würden. Dasselbe gilt für Personen, die vom alten Plugin aktualisieren.

1 „Gefällt mir“

Warum zum Teufel?!? Dieses Plugin ist wichtig und eines der beliebtesten. Die Diskussion in diesem Thema enthielt viele interessante Beiträge. Ich habe mindestens einen Leitfaden in einem Beitrag geschrieben und darauf vertraut, dass er zum Nachschlagen vorhanden sein wird. Ich und meine Kollegen haben sogar einige der Beiträge als Lesezeichen markiert … und jetzt ist alles weg?
[/quote]

Das hätte ich vielleicht etwas feinfühliger formulieren können. :slightly_smiling_face:

Hoffentlich (wenn alles gut geht :crossed_fingers:) wurden nützliche Informationen/interessante Diskussionen entweder in den OP verschoben oder in ein neues Thema aufgeteilt. Es besteht die Möglichkeit, dass dies nicht immer geschieht, aber ich schaue gerne nach. :+1:

2 „Gefällt mir“

Sicher, vielleicht nicht genug Kaffee … aber es ist großartig, festzustellen, dass Dinge, in die man (im Interesse einer Gemeinschaft) Zeit investiert, im Abfall landen. Ich schätze, ich hätte die Anleitung und die Skripte, die ich für das Upgrade vom alten Plugin geschrieben habe, sowie die anderen Beiträge, an denen ich interessiert war, speichern sollen, und dann hoffen, dass mich die Leute per E-Mail um Hilfe bitten. Wer hätte gedacht, dass das Posten im Community-Forum die unsicherste Option sein würde. Ja, nicht genug Kaffee …

Keines davon ist hier passiert, soweit ich das beurteilen kann.

Das Thema wieder aufleben zu lassen wäre zu …? Definitiv nicht genug Kaffee! :slight_smile:

1 „Gefällt mir“

Ich glaube, ich habe alle richtigen? Ich habe sie aus dem Auto-Timer-Bereich in Support verschoben, also sollten sie vor jeder Löschung sicher sein. :+1: Gibt es Änderungen oder Anpassungen, die ich vornehmen soll?