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 إعجابًا

مرحباً، يبدو أن إضافة الرياضيات تعتمد على الواجهة الأمامية لعرض الصيغة. لذلك، لا يمكن لمستخدمي البريد الإلكتروني لدينا تلقي الصيغة الرياضية المعروضة.
هل هناك أي طريقة لحل هذه المشكلة؟

من الناحية الفنية، نعم… ولكن الأمر صعب. سنحتاج إلى تحميل MathJax في Mini Racer (أو Node) ومحاكاة DOM وعرضه على SVG.

أنا متأكد من أن بعض الأشخاص قاموا بذلك من قبل ولكن لا يمكنني العثور على أمثلة سهلة في البرية يتم صيانتها. ربما يستحق الأمر اختبار ما إذا كانت حزمة Node تعمل في البداية.

3 إعجابات

هل هناك طريقة لاستخدام MathJax 3 بدلاً من ذلك؟ إنه أصغر بكثير ويمكنه بالتالي تقليل أوقات التحميل وتحسين سرعة الصفحة.

ما الجديد في MathJax v3.0 — وثائق MathJax 3.2

لقد حاولت تغيير عنوان URL، لكنني لا أعرف بالضبط أي إصدار يجب أن أختاره من البناء المعياري.

إعجابَين (2)

قد تكون مهتمًا بـ رد @sam على استفساري قبل بضعة أشهر بخصوص خطط تحديث المكون الإضافي إلى MathJax 3:

منفتح تمامًا على ذلك، إذا شعر شخص ما بالرغبة في المساعدة فسأكون سعيدًا.

كما تتبعت في ذلك الموضوع، نظرًا لأن MathJax 3 يتعامل مع ملف التكوين الخاص به بشكل مختلف عن MathJax 2.x، فإن ترقية هذا المكون الإضافي ستتطلب أكثر من مجرد تغيير عنوان URL.

4 إعجابات

الذكاء الاصطناعي يقدم إجابات بتنسيق لاتكس. لقد كتبت موجهًا لتحويل تنسيق لاتكس هذا إلى تنسيق MathJax، ولكن الموجه لا يتم تنفيذه دائمًا ويستجيب بتنسيق لاتكس. عندما كتبت مشكلتي إلى مجتمع OpenAI، جاء الاقتراح التالي.

"لقد قررت أنه لا يستحق حتى عناء إرباك موجه النظام، عندما يمكنني ببساطة القيام بما يلي من جانبي بالنتائج:

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

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

"
هل يمكنك تطبيق هذا الحل في التحديث القادم؟

إعجابَين (2)

أعجبني هذا الاقتراح، أتفق على أن لاتكس يمكن أن يكون مزعجًا في ردود الذكاء الاصطناعي والتعليمات النظامية إذا كان الأمر صعبًا. خاصة وأن GPT4o تم ضبطه بدقة على لاتكس. أؤيد تمامًا إنشاء نوع من طلب السحب مع خيار لدعم “وضع لاتكس” إذا قمت بتحديد مربع في إعدادات الموقع.

3 إعجابات

لا أعرف ما إذا كنت أتحدث عن نفس الشيء، ولكن بالنسبة لي نجح هذا. لا أستخدم أي صيغ صعبة حقًا.

أنت تفهم MathJax بشكل كامل وتقوم بإنشائه.

عند تقديم التعبيرات الرياضية، استخدم القواعد التالية:
1. بالنسبة للتعبيرات الرياضية المضمنة، استخدم علامات الدولار المفردة `$...$`.
2. بالنسبة للتعبيرات الرياضية بأسلوب العرض، استخدم علامات الدولار المزدوجة `$$...$$`.

على سبيل المثال:
- مضمن: معادلة تكافؤ الكتلة والطاقة هي $e=mc^2$.
- عرض:
$$
e=mc^2
$$
إعجاب واحد (1)

هل يمكنك إضافة هذه الميزة في التحديث القادم. بغض النظر عن عدد المرات التي أكتب فيها الموجه، فإنه لا يعمل بشكل صحيح دائمًا. في منتدى OpenAI، يقترحون ترتيبًا مثل الترتيب أعلاه، وليس موجهًا، كحل نهائي.

نعم هذا مزعج للغاية، نرحب بطلبات السحب (PR) إذا كنت ترغب في تجربته.

إعجاب واحد (1)

أود تجربته، وسأكون سعيدًا إذا فتحت طلب سحب يا @sam

مرحباً، لا يمكن عرض المعادلات داخل الوسم “details” عند استخدام محرك MathJax. مثل هذا

[details="ملخص"]
$a \times b = c$
[/details]

هل يمكنك إلقاء نظرة على هذه المشكلة؟

إعجابَين (2)

لقد لاحظت أنه على Meta، لا يتم عرض الرياضيات في نافذة المعاينة، ولكنها (أعتقد) يتم عرضها في المنشورات. سأختبر ذلك هنا:

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

في نافذة المعاينة أرى 1 - a = 1 - \\frac{1}{1 + e^{-z}}.

هل هذه مشكلة معروفة؟ أتساءل عما إذا كان هناك تكوين معين يسبب ذلك.
في موقع DeepLearning.AI Discourse، يتم عرض الرياضيات في المعاينة، ولكنه متقطع جدًا - ينتقل من كود MathJax إلى الرياضيات المعروضة مع كل ضغطة مفتاح. لا أجد هذه المشكلة على موقع التطوير المحلي الخاص بي. مرة أخرى، أتساءل عما إذا كانت هذه مشكلة تكوين.

3 إعجابات

هناك اقتراحات جديدة من مجتمع OpenAI بخصوص المشاكل التي أواجهها. هل تخططون لإجراء تحديث بخصوص هذا؟ الاقتراحات هي كالتالي:

الاقتراح 1:

def parse_stream_to_katex(stream: Stream):
    """
    تأخذ دفق OpenAI وتستبدل محددات ChatGPT LaTeX
    بمحددات KateX.
    تُنتج نصًا، وليس أجزاءً
    """
    last_text = ""
    for chunk in stream:
        text = chunk.choices[0].delta.content
        if text:
            # أحيانًا يمكن تقسيم المحددات مثل \( على جزأين.
            # إذا انتهى الجزء السابق بـ \، قم بإلحاقه بهذا الجزء
            if last_text.endswith("\\"):
                text = last_text + text

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

            # إذا انتهى النص بـ \، فلن نعيده، سنقوم بتضمينه في الجزء التالي
            if not text.endswith("\\"):
                yield text

الاقتراح 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 }) => {
    // استبدل \[ بـ $$ و \] بـ $$ لضمان التوافق
    const processedText = content
      .replace(/\[/g, '$$')  // استبدل كل تكرارات \[ بـ $$
      .replace(/\]/g, '$$') // استبدل كل تكرارات \] بـ $$
      .replace(/\(/g, '$')  // استبدل كل تكرارات \( بـ $
      .replace(/\)/g, '$'); // استبدل كل تكرارات \) بـ $

    const remarkMathOptions = {
        singleDollarTextMath: false,

};



return (
    <ReactMarkdown
        className="markdown-content"
        children={processedText}
        remarkPlugins={[[remarkMath, remarkMathOptions], remarkGfm]} // مرر الخيارات كالعنصر الثاني في المصفوفة
        rehypePlugins={[rehypeRaw, rehypeKatex]} // قم بتضمين rehypeRaw لـ HTML، و rehypeKatex لـ LaTeX
    />
);

};

export default MarkdownLaTeXRenderer;

إعجاب واحد (1)

وكـمستخدم نهائي… أستخدم المطالبة النظامية لذلك (OpenAI).

عندما تكون الرياضيات في سطر أو فصل خاص بها، قم بتغيير \( و \) → إلى أسطر خاصة بها، قبل وبعد، $$ موثوقة تمامًا.

ولكن عندما يجب أن يحدث الشيء نفسه ضمن السطر باستخدام $ واحدة… يفشل ذلك في كل مرة تقريبًا.

إذا كان يمكن أن يحدث ذلك تلقائيًا… فهذا أفضل.

إعجاب واحد (1)

عند عرض الصيغ الرياضية على جهازي المحمول، لا يمكنني رؤية الصيغة بأكملها بشكل صحيح (الصيغة طويلة جدًا). هل يعرف أحد كيفية حل هذه المشكلة؟
image
أدناه العرض الصحيح على جهاز الكمبيوتر.
image

هل يتم تدوير الهاتف أفقيًا؟ ولكن لماذا تم اقتباسه، وهل يمكن أن يكون هذا هو السبب؟

بخلاف ذلك. سألت الذكاء الاصطناعي في منتداي فأجاب بهذا (لا أعرف ما إذا كان مفيدًا أم مجرد هراء).

حلول لمحاذاة المعادلات الطويلة باستخدام MathJax AI

Jagster:
يستخدم المنتدى MathJax للرياضيات والمعادلات. في بعض الأحيان، تكون المعادلة طويلة جدًا بحيث لا تتناسب مع شاشة الهاتف المحمول. هل هناك طريقة لتقسيم المعادلة إلى عدة أسطر بطريقة ما؟

Asiavastaaja:
لا يدعم MathJax بشكل مباشر التقسيم التلقائي للأسطر للمعادلات، ولكن يمكنك استخدام بعض التقنيات لجعل المعادلات الطويلة تتناسب بشكل أفضل مع شاشات الهواتف المحمولة. إليك بعض النصائح:

  1. استخدم بيئة align: يمكنك تقسيم المعادلة إلى عدة أسطر باستخدام بيئة align. يتيح لك ذلك محاذاة وتوزيع أجزاء المعادلة عبر عدة أسطر. على سبيل المثال:

    $$
    \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. استخدم بيئة split: هذه طريقة أخرى لتقسيم المعادلة إلى عدة أسطر. وهي مفيدة بشكل خاص عندما تريد تقسيم المعادلة إلى أجزاء دون الحاجة إلى المحاذاة. على سبيل المثال:

    $$
    \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. استخدم بيئة multline: تم تصميم هذه البيئة للمعادلات الطويلة التي لا تتناسب مع سطر واحد. تقوم بتقسيم المعادلة إلى عدة أسطر دون محاذاة. على سبيل المثال:

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

تسمح لك هذه البيئات بالتحكم في عرض المعادلات وضمان سهولة قراءتها حتى على الشاشات الصغيرة. تذكر أن بيئات MathJax غالبًا ما تتطلب حزمة amsmath، والتي يتم تمكينها عادةً افتراضيًا في MathJax.

@Jagster هذه يجب أن تكون حلولاً جيدة. أردت في الأصل تعيين شريط تمرير أفقي للصيغة، لكن ذلك لم ينجح.

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

أواجه مشكلة في نسخ الصيغ الرياضية من جداول بيانات Google إلى Meta Discourse. ألا تبدو الصيغ معروضة بشكل صحيح؟

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

أعتقد أنك بحاجة إلى الهروب من $ و % باستخدام \\.
NPV=CFt * [1-1(1+r)Tr]- CFo= 84,000 * [1-1(1+13\\%)713\\%]- 385,000 = \\$-13,500

دعنا نرى هنا:

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


يتم عرضه بشكل جيد، ولكن لا توجد شريط تمرير لرؤية الرياضيات بأكملها. ومع ذلك، توجد في المعاينة.
في المنشور، يمكنك فقط رؤية الجزء الآخر إذا قمت بالتكبير: