Summary
Discourse Math uses MathJax (default) or KaTeX to render maths in your Discourse forum.
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:
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)
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 document Perform check on document:
67 个赞
Lhc_fl
(Linca)
2023 年5 月 16 日 07:54
213
您好,Math 插件似乎依赖于前端进行渲染。因此,我们的电子邮件用户无法收到渲染后的数学公式。
有什么方法可以解决这个问题吗?
sam
(Sam Saffron)
2023 年5 月 16 日 08:29
214
Linca:
有什么办法可以解决这个问题吗?
技术上来说,是的……但这很棘手。我们需要加载 mathjax 到 mini racer(或 node)中,模拟 DOM 并渲染成 SVG。
我确信以前有人做过,但在实际应用中找不到易于维护的例子。可能值得先测试一下 node 包是否可用。
3 个赞
有办法使用 MathJax 3 吗?它体积更小,因此可以缩短加载时间并提高页面速度。
MathJax v3.0 有什么新变化 — MathJax 3.2 文档
我尝试更改了 URL,但不知道该从模块化构建中选择哪个版本。
2 个赞
bbirkett
(Bruce Birkett)
2023 年11 月 8 日 01:51
216
您可能对 @sam 几个月前对我的查询的回复 感兴趣,该回复涉及将插件更新到 MathJax 3 的计划:
如果有人愿意帮忙,我将非常高兴。
正如我在该主题中找到的那样,由于 MathJax 3 处理其配置文件的方式与 MathJax 2.x 不同,因此升级此插件不仅仅是更改 URL。
4 个赞
ozkn
(Mathx)
2024 年6 月 8 日 09:20
217
人工智能以 LaTeX 格式提供答案。我写了一个提示来将这种 LaTeX 格式转换为 MathJax 格式,但该提示并不总是被实现,而是以 LaTeX 格式响应。当我将我的问题写到 OpenAI 社区时,收到了以下建议。
“我决定不值得费力地在系统提示中添加内容,因为我可以在我的端上对结果进行以下操作:
translateLaTex = (val: string): string => {
if (val.indexOf("\\\\") == -1) return val;
return val.replaceAll("\\\\(", "$")//
.replaceAll("\\\\)", "$")//
.replaceAll("\\[", "$")//
.replaceAll("\\]", "$");
}
您可以在下一次更新中应用此解决方案吗?”
2 个赞
sam
(Sam Saffron)
2024 年6 月 8 日 11:28
218
我喜欢这个主意,同意 LaTeX 在 AI 回复中可能很烦人,并且在系统提示中如果很难的话会很麻烦。尤其是因为 GPT4o 是在 LaTeX 上进行了微调。完全支持在网站设置中勾选一个框来创建一个支持“LaTeX 模式”的 PR。
3 个赞
Jagster
(Jakke Lehtonen)
2024 年6 月 8 日 11:57
219
我不知道我是否在谈论同一件事,但对我来说,这很有效。不过,我并没有使用什么特别复杂的公式。
你完全理解 MathJax 并生成它。
在呈现数学表达式时,请遵循以下规则:
1. 对于行内数学表达式,请使用单美元符号 `$...$`。
2. 对于显示样式的数学表达式,请使用双美元符号 `$$...$$`。
例如:
- 行内:质能等价方程是 $e=mc^2$。
- 显示:
$$
e=mc^2
$$
1 个赞
ozkn
(Mathx)
2024 年9 月 5 日 07:00
220
您能在下次更新中添加此功能吗?无论我输入多少提示,它并不总是能正常工作。在 OpenAI 论坛上,他们建议像上面那样的安排,而不是提示,作为最终解决方案。
ozkn
(Mathx)
2024 年9 月 5 日 07:58
222
我很想试试,如果你能开一个 PR 我会很高兴 @sam
您好,在使用 MathJax 引擎时,“details”标签内无法渲染公式。像这样
[details="Summary"]
$a \times b = c$
[/details]
您能看看这个问题吗?
2 个赞
simon
2024 年10 月 24 日 06:17
224
我注意到在 Meta 上,数学公式在预览窗口中无法渲染,但在帖子中可以(我认为)。我在这里测试一下:
$$\n1 - a = 1 - \frac{1}{1 + e^{-z}}\n$$
在预览窗口中,我看到的是 1 - a = 1 - \\frac{1}{1 + e^{-z}}。
这是一个已知问题吗?我想知道是否有特定的配置会导致这种情况。
在 DeepLearning.AI Discourse 网站上,数学公式可以在预览中渲染,但非常卡顿——每次击键都会从 mathjax 代码变为渲染后的数学公式。我在我的本地开发站点上没有遇到这个问题。同样,我想知道那是否是配置问题。
3 个赞
ozkn
(Mathx)
2024 年12 月 13 日 09:12
225
关于我遇到的问题,来自openai社区的新建议。您是否计划对此进行更新?建议如下。
建议 1;
def parse_stream_to_katex(stream: Stream):
"""
接收一个OpenAI流并用KateX的定界符替换ChatGPT的LaTeX定界符
产生文本,而不是块
"""
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 个赞
Jagster
(Jakke Lehtonen)
2024 年12 月 13 日 09:21
226
作为最终用户……我正在为此使用系统提示(OpenAI)。
当数学公式单独占一行或一个章节时,将 \( 和 \) 更改为单独的行,前后加上 $$,这是相当可靠的。
但是,当内联使用单个 $ 执行相同操作时……这几乎每次都会失败。
如果能自动完成……那就更好了。
1 个赞
CAX.DO
(Max)
2024 年12 月 21 日 13:57
227
在我的移动设备上查看数学公式时,公式显示不全(公式太长)。有人知道如何解决这个问题吗?
下面是PC上的正确显示。
Jagster
(Jakke Lehtonen)
2024 年12 月 21 日 15:16
228
横放手机?但为什么它被引用了,这会是问题所在吗?
另外。我问了论坛的 AI,它给出了这个答案(不知道是否有用,还是纯粹的胡言乱语)。
使用 MathJax 对齐长方程的解决方案
AI
Jagster:
论坛使用 MathJax 来处理数学和方程。有时,一个方程太长,无法在移动屏幕上显示。有什么方法可以将其分成多行吗?
Asiavastaaja:
MathJax 不直接支持方程的自动换行,但你可以使用一些技巧来让长方程更好地适应移动屏幕。以下是一些建议:
使用 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}
$$
使用 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}
$$
使用 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 宏包,而 amsmath 宏包通常在 MathJax 中默认启用。
CAX.DO
(Max)
2024 年12 月 22 日 02:54
229
@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
它渲染正常,但没有滚动条可以看到整个数学公式。不过,在预览中可以看到。
在帖子中,只有缩小才能看到其他部分: