Discourse Math

:discourse2: Summary Discourse Math uses MathJax (default) or KaTeX to render maths in your Discourse forum.
:open_book: Install Guide This plugin is bundled with Discourse core. There is no need to install the plugin separately.

Enabling Math

The Math plugin can be enabled from its settings, accessed from your admin/plugins page:

Math settings

Features

Once enabled, you can render inline math by wrapping with a single $ like so: $E=mc^2$.

You can render blocks of maths by wrapping with $$

$$
\sqrt{(-1)} \; 2^3 \; \sum \; \pi
$$

Discourse Math uses a heuristic to ensure that sentences such as: “I spent 20$ and another 100$” do not get converted.

When using MathJax, you can also enable asciimath processing which uses % as a delimiter: %E=mc^2%

Site Settings

  • See all relevant site settings by searching your admin settings for “math”
Name Description
discourse math enabled Enable Discourse Math plugin (will add special processing to $ and $$ blocks)
discourse math provider Default math rendering provider [mathjax/katex]
discourse math zoom on hover Zoom 200% on hover (MathJax only)
discourse math enable accessibility Enable accessibility features (MathJax only)
discourse math enable asciimath Enable asciimath (will add special processing to % delimited input) (MathJax only)

:discourse2: Hosted by us? This plugin is available on all of our hosting tiers Math | Discourse - Civilized Discussion

Last edited by @tobiaseigen 2025-07-16T21:22:59Z

Check documentPerform check on document:
67 „Gefällt mir“

Hallo, das Math-Plugin scheint für das Rendering auf das Frontend angewiesen zu sein. Daher können unsere E-Mail-Benutzer die gerenderte mathematische Formel nicht empfangen.
Gibt es eine Möglichkeit, dieses Problem zu lösen?

Technisch gesehen ja … aber es ist knifflig. Wir müssten MathJax in Mini Racer (oder Node) laden, das DOM simulieren und in ein SVG rendern.

Ich bin sicher, dass es schon von einigen Leuten gemacht wurde, aber ich kann keine einfachen Beispiele finden, die gepflegt werden. Wahrscheinlich lohnt es sich, zuerst zu testen, ob das Node-Paket überhaupt funktioniert.

3 „Gefällt mir“

Gibt es eine Möglichkeit, stattdessen MathJax 3 zu verwenden? Es ist viel kleiner und kann daher Ladezeiten verkürzen und die Seitengeschwindigkeit verbessern.

Was ist neu in MathJax v3.0 — MathJax 3.2 Dokumentation

Ich habe versucht, die URL zu ändern, aber ich weiß nicht genau, welche Version ich aus dem modularen Build auswählen soll.

2 „Gefällt mir“

Sie sind vielleicht an @sams Antwort auf meine Anfrage vor ein paar Monaten bezüglich der Pläne, das Plugin auf MathJax 3 zu aktualisieren, interessiert:

Absolut offen dafür, wenn jemand Lust hat zu helfen, würde ich mich freuen.

Wie ich in diesem Thread herausgefunden habe, erfordert die Aktualisierung dieses Plugins mehr als nur die Änderung der URL, da MathJax 3 seine Konfigurationsdatei anders handhabt als MathJax 2.x.

4 „Gefällt mir“

Künstliche Intelligenz gibt Antworten im Latex-Format aus. Ich habe eine Eingabeaufforderung geschrieben, um dieses Latex-Format in das MathJax-Format zu konvertieren, aber die Eingabeaufforderung wird nicht immer umgesetzt und antwortet im Latex-Format. Als ich mein Problem der OpenAI-Community schilderte, kam folgender Vorschlag:

„Ich habe beschlossen, dass es sich nicht einmal lohnt, die Mühe zu machen, eine Systemaufforderung zu überladen, wenn ich am Ende einfach Folgendes tun kann:

    translateLaTex = (val: string): string => {
        if (val.indexOf("\\\\") == -1) return val;

        return val.replaceAll("\\\\(", "$")//
            .replaceAll("\\\\)", "$")//
            .replaceAll("\\[", "$")//
            .replaceAll("\\]", "$");
    }


Können Sie diese Lösung im nächsten Update anwenden?

2 „Gefällt mir“

Ich mag diese Idee, stimme zu, dass LaTeX in KI-Antworten und Systemaufforderungen lästig sein kann, wenn es schwierig ist. Umso mehr, da GPT4o auf LaTeX feinabgestimmt ist. Unterstütze voll und ganz die Erstellung einer Art PR mit einer Option zur Unterstützung des „LaTeX-Modus“, wenn Sie in den Website-Einstellungen ein Kontrollkästchen aktivieren.

3 „Gefällt mir“

Ich weiß nicht, ob ich vom selben spreche, aber für mich hat das funktioniert. Ich verwende allerdings keine wirklich schwierigen Formeln.

Sie verstehen MathJax vollständig und generieren es.

Bei der Darstellung mathematischer Ausdrücke gelten folgende Regeln:
1. Verwenden Sie für Inline-Mathematikausdrücke einfache Dollarzeichen `$...$`.
2. Verwenden Sie für mathematische Ausdrücke im Anzeigestil doppelte Dollarzeichen `$$...$$`.

Zum Beispiel:
- Inline: Die Gleichung der Masse-Energie-Äquivalenz lautet $e=mc^2$.
- Anzeige:
$$
e=mc^2
$$
1 „Gefällt mir“

Können Sie diese Funktion im nächsten Update hinzufügen? Egal wie sehr ich die Eingabeaufforderung tippe, sie funktioniert nicht immer richtig. Im OpenAI-Forum schlagen sie eine Anordnung wie die oben genannte als endgültige Lösung vor, keine Eingabeaufforderung.

Ja, das ist sehr ärgerlich, PR ist willkommen, wenn Sie es versuchen möchten.

1 „Gefällt mir“

Ich würde es gerne ausprobieren, ich würde mich freuen, wenn du einen PR @sam eröffnest

Hallo, Gleichungen können nicht innerhalb des „details“-Tags gerendert werden, wenn die MathJax-Engine verwendet wird. So

[details="Zusammenfassung"]
$a \times b = c$
[/details]

Könnten Sie sich dieses Problem ansehen?

2 „Gefällt mir“

Mir ist aufgefallen, dass auf Meta die Mathematik nicht im Vorschaufenster gerendert wird, aber (glaube ich) in Beiträgen gerendert wird. Ich werde das hier testen:

$$\n1 - a = 1 - \frac{1}{1 + e^{-z}}\n$$

Im Vorschaufenster sehe ich 1 - a = 1 - \\frac{1}{1 + e^{-z}}.

Ist das ein bekanntes Problem? Ich frage mich, ob es eine bestimmte Konfiguration gibt, die es verursacht.

Auf der DeepLearning.AI Discourse-Website wird Mathematik in der Vorschau gerendert, aber sie ist wirklich ruckelig – sie wechselt bei jedem Tastendruck von MathJax-Code zu gerenderter Mathematik. Dieses Problem habe ich auf meiner lokalen Entwicklungsumgebung nicht. Auch hier frage ich mich, ob das ein Konfigurationsproblem ist.

3 „Gefällt mir“

Es gibt neue Vorschläge von der OpenAI-Community bezüglich der Probleme, die ich habe. Planen Sie, diesbezüglich ein Update vorzunehmen? Vorschläge lauten wie folgt:

Vorschlag 1;

def parse_stream_to_katex(stream: Stream):
    """
    Nimmt einen OpenAI Stream und ersetzt ChatGPT LaTeX-Begrenzer
    durch KateX-Begrenzer.
    Gibt Text aus, nicht Chunks
    """
    last_text = ""
    for chunk in stream:
        text = chunk.choices[0].delta.content
        if text:
            # Manchmal können Begrenzer wie \\( über zwei Chunks aufgeteilt sein.
            # Wenn der vorherige Chunk mit \\ endete, fügen Sie diesen Chunk hinzu
            if last_text.endswith("\\"):
                text = last_text + text

            text = (
                text.replace(r"\[", "$$")
                .replace(r"\]", "$$")
                .replace(r"\(", "$")
                .replace(r"\)", "$")
            )
            last_text = text

            # Wenn der Text mit \\ endet, geben wir ihn nicht zurück, wir werden ihn im nächsten Chunk einbeziehen
            if not text.endswith("\\"):
                yield text

Vorschlag 2:

// MarkdownLaTeXRenderer.js
import React from 'react';
import ReactMarkdown from 'react-markdown';
import remarkGfm from 'remark-gfm';
import remarkMath from 'remark-math';
import rehypeRaw from 'rehype-raw';
import rehypeKatex from 'rehype-katex';

const MarkdownLaTeXRenderer = ({ content }) => {
    // Ersetzen Sie \\[ durch $$ und \\] durch $$, um Kompatibilität zu gewährleisten
    const processedText = content
      .replace(/\[/g, '$$')  // Ersetzen Sie alle Vorkommen von \\[ durch $$
      .replace(/\]/g, '$$') // Ersetzen Sie alle Vorkommen von \\] durch $$
      .replace(/\\(/g, '$')  // Ersetzen Sie alle Vorkommen von \\( durch $$
      .replace(/\\\)/g, '$'); // Ersetzen Sie alle Vorkommen von \\) durch $$

    const remarkMathOptions = {
        singleDollarTextMath: false,

};



return (
    <ReactMarkdown
        className="markdown-content"
        children={processedText}
        remarkPlugins={[[remarkMath, remarkMathOptions], remarkGfm]} // Optionen als zweites Element des Arrays übergeben
        rehypePlugins={[rehypeRaw, rehypeKatex]} // rehypeRaw für HTML, rehypeKatex für LaTeX einschließen
    />
);

};

export default MarkdownLaTeXRenderer;

1 „Gefällt mir“

Und als Endbenutzer… Ich verwende dafür die Systemaufforderung (OpenAI).

Wenn Mathematik in einer eigenen Zeile oder einem eigenen Kapitel steht, ändern Sie \( und \) → in eigene Zeilen, davor und danach, $$ ist ziemlich zuverlässig.

Aber wenn dasselbe Inline mit einem einzelnen $ geschehen soll… das schlägt fast jedes Mal fehl.

Wenn das automatisch geschehen könnte… umso besser.

1 „Gefällt mir“

Wenn ich mathematische Formeln auf meinem Mobilgerät ansehe, kann ich die gesamte Formel nicht richtig sehen (die Formel ist zu lang). Weiß jemand, wie man dieses Problem löst?
image
Unten ist die korrekte Anzeige auf dem PC.
image

Telefon horizontal drehen? Aber warum ist das in Anführungszeichen gesetzt und kann das das Problem sein?

Ansonsten habe ich die KI meines Forums gefragt und sie hat Folgendes geantwortet (keine Ahnung, ob es hilfreich oder reiner Mist ist).

Lösungen zum Ausrichten langer Gleichungen mit MathJax KI

Jagster:
Das Forum verwendet MathJax für Mathematik und Gleichungen. Manchmal ist eine Gleichung so lang, dass sie nicht auf einen mobilen Bildschirm passt. Gibt es eine Möglichkeit, die Gleichung irgendwie in mehrere Zeilen aufzuteilen?

Antwortende KI:
MathJax unterstützt das automatische Zeilenumbruch für Gleichungen nicht direkt, aber Sie können einige Techniken verwenden, um lange Gleichungen besser auf mobile Bildschirme zu passen. Hier sind ein paar Tipps:

  1. Verwenden Sie die align-Umgebung: Sie können die Gleichung mit der align-Umgebung in mehrere Zeilen aufteilen. Dies ermöglicht es Ihnen, Teile der Gleichung über mehrere Zeilen hinweg auszurichten und zu verteilen. Zum Beispiel:

    $$
    \begin{align}
    a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + w + x + y + z = 0
    \end{align}
    $$
    
  2. Verwenden Sie die split-Umgebung: Dies ist eine weitere Möglichkeit, eine Gleichung in mehrere Zeilen aufzuteilen. Sie ist besonders nützlich, wenn Sie die Gleichung in Teile aufteilen möchten, ohne dass eine Ausrichtung erforderlich ist. Zum Beispiel:

    $$
    \begin{split}
    a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + w + x + y + z = 0
    \end{split}
    $$
    
  3. Verwenden Sie die multline-Umgebung: Diese Umgebung ist für lange Gleichungen konzipiert, die nicht auf eine einzige Zeile passen. Sie teilt die Gleichung ohne Ausrichtung in mehrere Zeilen auf. Zum Beispiel:

    $$
    \begin{multline}
    a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + u + v + w + x + y + z = 0
    \end{multline}
    $$
    

Diese Umgebungen ermöglichen es Ihnen, die Darstellung von Gleichungen zu steuern und sicherzustellen, dass sie auch auf kleineren Bildschirmen lesbar sind. Denken Sie daran, dass MathJax-Umgebungen oft das amsmath-Paket erfordern, das in MathJax normalerweise standardmäßig aktiviert ist.

@Jagster Dies sollten gute Lösungen sein. Ich wollte ursprünglich eine horizontale Bildlaufleiste für die Formel einstellen, aber das war nicht erfolgreich.

.math-tex {
    overflow-x: auto;
    max-width: 100%;
    padding: 5px 0;
    display: block;
}

Ich habe Probleme beim Kopieren von mathematischen Formeln von Google Tabellen in Meta Discourse. Werden die Formeln nicht korrekt gerendert?

NPV=CFt * [1-1(1+r)Tr]- CFo= 84.000 * [1-1(1+13%)713%]- 385.000 = $-13.500

PI = 1 + NPVCFo = 1+ n=1784,000(1,13)n - 385,000385,000 ~ 0,965

Ich glaube, Sie müssen $ und % mit \\ escapen.
NPV=CFt * [1-1(1+r)Tr]- CFo= 84.000 * [1-1(1+13\\%)713\\%]- 385.000 = \\$-13.500

Mal sehen:

NPV=CFt * [1-1(1+r)Tr]- CFo= 84.000 * [1-1(1+13\\%)713\\%]- 385.000 = \\$-13.500
PI = 1 + NPVCFo = 1+ n=1784.000(1,13)n - 385.000385.000 ~ 0,965


Es wird zwar richtig dargestellt, aber es gibt keine Bildlaufleiste, um die gesamte Mathematik zu sehen. In der Vorschau gibt es jedoch eine.
Im Beitrag kann man den anderen Teil nur sehen, wenn man zoomt: