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 « J'aime »

Bonjour, le plugin Math semble dépendre du frontend pour le rendu. Par conséquent, nos utilisateurs d’e-mails ne peuvent pas recevoir la formule mathématique rendue.
Existe-t-il un moyen de résoudre ce problème ?

Techniquement, oui… mais c’est délicat. Nous devrions charger mathjax dans mini racer (ou node) simuler le DOM et rendre en SVG.

Je suis sûr que cela a déjà été fait par certaines personnes, mais je ne trouve pas d’exemples faciles et maintenus dans la nature. Cela vaut probablement la peine de tester si le package node fonctionne même pour commencer.

3 « J'aime »

Existe-t-il un moyen d’utiliser MathJax 3 à la place ? Il est beaucoup plus petit et peut donc réduire les temps de chargement et améliorer la vitesse de la page.

Nouveautés de MathJax v3.0 — Documentation de MathJax 3.2

J’ai essayé de changer l’URL, mais je ne sais pas exactement quelle version choisir dans la construction modulaire.

2 « J'aime »

Vous pourriez être intéressé par la réponse de @sam à ma question il y a quelques mois concernant les plans de mise à jour du plugin vers MathJax 3 :

Absolument ouvert à cela, si quelqu’un se sent de l’aide, je serais ravi.

Comme je l’ai découvert dans ce fil de discussion, comme MathJax 3 gère son fichier de configuration différemment de MathJax 2.x, la mise à niveau de ce plugin nécessitera plus qu’un simple changement d’URL.

4 « J'aime »

L’intelligence artificielle donne des réponses au format latex. J’ai écrit une invite pour convertir ce format latex en format mathjax, mais l’invite n’est pas toujours mise en œuvre et répond au format latex. Lorsque j’ai exposé mon problème à la communauté openai, la suggestion suivante est arrivée.

« Je ai décidé que cela ne valait même pas la peine de polluer une invite système, alors que je pouvais simplement faire ce qui suit de mon côté avec les résultats :

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

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

»
Pouvez-vous appliquer cette solution dans la prochaine mise à jour ?

2 « J'aime »

J’aime cette idée, je suis d’accord que le latex peut être gênant dans les réponses de l’IA et les invites système si c’est difficile. Encore plus parce que GPT4o est affiné sur le latex. Je soutiens totalement la création d’une sorte de PR avec un interrupteur pour prendre en charge le « mode latex » si vous cochez une case dans les paramètres du site.

3 « J'aime »

Je ne sais pas si je parle de la même chose, mais pour moi, cela a fonctionné. Je n’utilise pas de formules très compliquées, cependant.

Vous comprenez parfaitement MathJax et le générez.

Lorsque vous présentez des expressions mathématiques, utilisez les règles suivantes :
1. Pour les expressions mathématiques en ligne, utilisez des signes dollar simples `$...$`.
2. Pour les expressions mathématiques de style affichage, utilisez des signes dollar doubles `$$...$$`.

Par exemple :
- En ligne : L'équation de l'équivalence masse-énergie est $e=mc^2$.
- Affichage :
$$
e=mc^2
$$
1 « J'aime »

Pouvez-vous ajouter cette fonctionnalité dans la prochaine mise à jour. Peu importe combien de fois je tape l’invite, cela ne fonctionne pas toujours correctement. Sur le forum OpenAI, ils suggèrent une disposition comme celle ci-dessus, pas une invite, comme solution définitive.

Oui, c’est très ennuyeux, une PR est la bienvenue si vous voulez tenter le coup.

1 « J'aime »

J’aimerais l’essayer, je serais heureux si vous ouvriez une PR @sam

Bonjour, les équations ne peuvent pas être rendues à l’intérieur de la balise « details » lors de l’utilisation du moteur MathJax. Comme ceci

[details="Résumé"]
$a \times b = c$
[/details]

Pourriez-vous examiner ce problème ?

2 « J'aime »

J’ai remarqué que sur Meta, les mathématiques ne sont pas rendues dans la fenêtre d’aperçu, mais elles le sont (je pense) dans les publications. Je vais tester cela ici :

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

Dans la fenêtre d’aperçu, je vois 1 - a = 1 - \\frac{1}{1 + e^{-z}}.

Est-ce un problème connu ? Je me demande s’il existe une configuration spécifique qui le provoque.

Sur le site DeepLearning.AI Discourse, les mathématiques sont rendues dans l’aperçu, mais c’est vraiment saccadé - cela passe du code mathjax aux mathématiques rendues à chaque frappe. Je ne rencontre pas ce problème sur mon site de développement local. Encore une fois, je me demande si c’est un problème de configuration.

3 « J'aime »

Il y a de nouvelles suggestions de la communauté openai concernant les problèmes que je rencontre. Prévoyez-vous de faire une mise à jour à ce sujet ? Les suggestions sont les suivantes.

Suggestion 1 :

def parse_stream_to_katex(stream: Stream):
    """
    Prend un flux OpenAI et remplace les délimiteurs LaTeX de ChatGPT
    par ceux de KateX.
    Produit du texte, pas des morceaux
    """
    last_text = ""
    for chunk in stream:
        text = chunk.choices[0].delta.content
        if text:
            # Parfois, les délimiteurs comme \( peuvent être divisés en deux morceaux.
            # Si le morceau précédent se terminait par \, ajoutez-le à ce morceau
            if last_text.endswith("\\"):
                text = last_text + text

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

            # Si le texte se termine par \, nous ne le retournons pas, nous l'inclurons dans le prochain morceau
            if not text.endswith("\\"):
                yield text

Suggestion 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 }) => {
    // Remplacez \[ par $$ et \] par $$ pour assurer la compatibilité
    const processedText = content
      .replace(/\[/g, '$$')  // Remplace toutes les occurrences de \[ par $$
      .replace(/\]/g, '$$') // Remplace toutes les occurrences de \] par $$
      .replace(/\(/g, '$')  // Remplace toutes les occurrences de \( par $
      .replace(/\)/g, '$'); // Remplace toutes les occurrences de \) par $

    const remarkMathOptions = {
        singleDollarTextMath: false,

};



return (
    <ReactMarkdown
        className="markdown-content"
        children={processedText}
        remarkPlugins={[[remarkMath, remarkMathOptions], remarkGfm]} // Passez les options comme deuxième élément du tableau
        rehypePlugins={[rehypeRaw, rehypeKatex]} // Incluez rehypeRaw pour HTML, rehypeKatex pour LaTeX
    />
);

};

export default MarkdownLaTeXRenderer;

1 « J'aime »

Et en tant qu’utilisateur final… J’utilise l’invite système pour cela (OpenAI).

Lorsque les mathématiques sont sur leur propre ligne ou chapitre, remplacez \( et \) par des lignes séparées, avant et après, $$ est assez fiable.

Mais lorsque la même chose devrait se faire en ligne avec un seul $, cela échoue presque à chaque fois.

Si cela pouvait se faire automatiquement… encore mieux.

1 « J'aime »

Lorsque j’affiche des formules mathématiques sur mon appareil mobile, je ne peux pas voir la formule entière correctement (la formule est trop longue). Quelqu’un sait-il comment résoudre ce problème ?
image
Ci-dessous, l’affichage correct sur le PC.
image

Tourner le téléphone horizontalement ? Mais pourquoi est-ce entre guillemets, et cela pourrait-il être le problème ?

Sinon. J’ai demandé à l’IA de mon forum et elle a répondu ceci (aucune idée si c’est utile ou pure foutaise).

Solutions pour aligner de longues équations avec MathJax IA

Jagster :
Le forum utilise MathJax pour les mathématiques et les équations. Parfois, une équation est si longue qu’elle ne rentre pas sur un écran mobile. Existe-t-il un moyen de diviser l’équation en plusieurs lignes ?

Répondant :
MathJax ne prend pas directement en charge le retour à la ligne automatique pour les équations, mais vous pouvez utiliser certaines techniques pour que les longues équations s’adaptent mieux aux écrans mobiles. Voici quelques conseils :

  1. Utilisez l’environnement align : Vous pouvez diviser l’équation en plusieurs lignes en utilisant l’environnement align. Cela vous permet d’aligner et de répartir des parties de l’équation sur plusieurs lignes. Par exemple :

    $$
    \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. Utilisez l’environnement split : C’est une autre façon de diviser une équation en plusieurs lignes. Elle est particulièrement utile lorsque vous souhaitez diviser l’équation en parties sans avoir besoin d’alignement. Par exemple :

    $$
    \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. Utilisez l’environnement multline : Cet environnement est conçu pour les longues équations qui ne rentrent pas sur une seule ligne. Il divise l’équation en plusieurs lignes sans alignement. Par exemple :

    $$
    \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}
    $$
    

Ces environnements vous permettent de contrôler la présentation des équations et de vous assurer qu’elles sont lisibles même sur de petits écrans. N’oubliez pas que les environnements MathJax nécessitent souvent le package amsmath, qui est généralement activé par défaut dans MathJax.

@Jagster Ces solutions devraient être bonnes. Je voulais à l’origine définir une barre de défilement horizontale pour la formule, mais cela n’a pas abouti.

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

J’ai du mal à copier les formules mathématiques de Google Sheets dans Meta Discourse. Les formules ne semblent-elles pas s’afficher correctement ?

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

Je pense que vous devez échapper $ et % avec \\.
NPV=CFt * [1-1(1+r)Tr]- CFo= 84,000 * [1-1(1+13\\%)713\\%]- 385,000 = \\$-13,500

Voyons voir ici :

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


Cela s’affiche correctement, mais il n’y a pas de barre de défilement pour voir l’intégralité des mathématiques. Il y en a une dans l’aperçu, cependant.
Dans la publication, vous ne pouvez voir l’autre partie qu’en zoomant :