Discourse 数学

:discourse2: 摘要 Discourse Math 使用 MathJax(默认)或 KaTeX 在你的 Discourse 论坛中渲染数学公式。
:open_book: 安装指南 此插件已打包在 Discourse 核心中。无需单独安装该插件。

启用数学公式

可以通过 admin/plugins 页面访问设置来启用数学公式插件:

Math settings

功能

启用后,你可以使用单个 $ 包裹来渲染行内数学公式,例如:$E=mc^2$

你可以使用 $$ 包裹来渲染数学公式块:

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

Discourse Math 使用启发式方法,确保像“我花了 20$ 又花了 100$"这样的句子不会被转换。

LaTeX 分隔符

通过站点设置启用后,你还可以使用标准的 LaTeX 分隔符:

  • 行内: \(...\) - 示例:\(E=mc^2\)
  • 块级: \[...\] - 示例:
    \[
    \frac{1}{2}
    \]
    

AsciiMath(仅限 MathJax)

使用 MathJax 时,你可以启用 asciimath 处理,它使用 % 作为分隔符:%E=mc^2%

编辑器集成

编辑器工具栏中包含一个 插入数学公式 按钮,其键盘快捷键为 Shift+M。点击后会打开一个模态窗口,你可以:

  • 在行内模式和块级模式之间切换
  • 编写 LaTeX 表达式
  • 预览并将表达式插入到你的帖子中

在富文本编辑器中,数学公式显示为可编辑节点,并带有编辑按钮以修改表达式。

聊天支持

数学公式同样会在 Discourse 聊天消息中渲染,使用相同的设置和渲染引擎。

渲染引擎

MathJax(默认)

  • 版本: 4.1
  • 输出格式: HTML(默认)或 SVG
  • 功能:
    • 上下文菜单(右键点击数学公式)
    • 为屏幕阅读器提供可访问性增强
    • 按住 Alt 键点击时缩放(175% 缩放)
    • 支持 AsciiMath

KaTeX(替代方案)

  • 功能:
    • 快速渲染
    • Mhchem 扩展 用于化学方程式
    • CopyTex 扩展 - 点击数学公式即可将 LaTeX 源代码复制到剪贴板
    • 支持使用 \label\ref\eqref 宏进行交叉引用

站点设置

在管理员设置中搜索“math”即可查看所有相关的站点设置。

名称 描述
discourse math enabled 启用 Discourse Math 插件(为 $ 和 $$ 块添加特殊处理)
discourse math provider 数学渲染提供者:mathjax(默认)或 katex
discourse math enable latex delimiters 启用 LaTeX 风格分隔符:\(...\) 用于行内,\[...\] 用于块级数学公式
discourse math mathjax output MathJax 输出格式:html(默认)或 svg(仅限 MathJax)
discourse math enable menu 为数学公式启用上下文菜单(仅限 MathJax)
discourse math enable accessibility 启用可访问性功能,如文本增强(仅限 MathJax 且启用了菜单时)
discourse math zoom on click 按住 Alt 键点击时缩放 175%(仅限 MathJax 且启用了菜单时)
discourse math enable asciimath 启用使用 % 分隔符的 asciimath 处理(仅限 MathJax)

:discourse2: 由我们托管?此插件适用于我们的所有托管层级 Math | Discourse - Civilized Discussion

70 个赞

2 个帖子已拆分到新主题:添加对 MathJax 电子邮件格式的支持

2 个帖子被拆分到新主题:Can Mathjax be upgraded to Version 3?

6 个帖子被拆分到新主题:为数学公式的 LaTeX 风格块和内联添加支持

一篇帖子被拆分到新主题:块中公式无法正确渲染

一个帖子被拆分到了新主题:预览中数学公式无法渲染

15 个帖子已拆分到新主题:数学和人工智能的变通方法

26 个帖子已拆分到新主题:将 Mathjax 升级到 4.0 版本

在 Discourse Math 中迁移到较新的 MathJax (v4.1) 集成后,我有一个快速的(积极的)现实世界的反馈。

我注意到的一项生活质量改进是,当输入无效或宏未定义时,MathJax 现在会提供非常具体、局部的反馈

  • 它仍然正确地渲染周围有效的结构(例如 \frac{...}{...}、括号等)
  • 但它会字面意义上将未识别的命令显示为可见(例如,将 \sinc 显示为文本),而不是使整个表达式失败或产生令人困惑的部分错误。

在实践中,这使得需要修复的内容一目了然,而不会掩盖已经正确的部分——这在教学环境和迭代包含大量数学内容的帖子时尤其有帮助。

例如,与其依赖定义了 \sinc,不如采用稳健的方法将其明确编写为运算符:

\frac{\Delta}{T}\operatorname{sinc}\! \left(\frac{\omega_r\Delta}{2}\right)

其中:

\operatorname{sinc}(x)=\frac{\sin x}{x}

总的来说,与旧的/不那么透明的失败模式相比,这种“渲染你能渲染的,清晰地显示其余部分”的行为感觉是可用性上的一个巨大胜利。感谢所有参与 MathJax 升级工作的人员。

3 个赞

只是想提醒所有通过 Google 来到这里的用户:此插件不适用于免费托管套餐。:expressionless_face:

您好,我理解您的沮丧。很抱歉您有这种感觉。对于未来的情况,您可以在此查看各计划对应的插件目录:此处

数学插件在该页面上被列为专业版/商业版/企业版插件。因此,有人可能会误以为它适用于免费计划。我并非建议您应免费提供该插件,只是认为应该将其说明得更加清晰一些。

1 个赞

没错。Discourse pricing | Discourse - Civilized Discussion 页面列出了所有套餐及其限制,包括插件,您可以快速查看哪些插件被允许使用。

1 个赞