将 Mathjax 升级到 4 版本

顺便说一下,这是此开发版本中通过人工智能进行数学校对的示例:

ProofreadMathAI

用户可以选择在 markdown 编辑器中高亮显示特定的数学表达式并请求对其进行校对。在新的数学编辑器中拥有该选项可能会很不错。

1 个赞

@sam 结果是 KaTeX 在新插件中工作得不太正常。如果你看一下,很明显是缺少字体的问题,而且控制台确实显示有一堆字体(Woff-v2)文件找不到。

这些字体实际上存在于正确的位置,应该是在样式表旁边的名为“fonts”的文件夹中。例如,我的开发版本中存在这两个文件:
http://localhost:4200/plugins/discourse-math/katex/katex.min.css

http://localhost:4200/plugins/discourse-math/katex/fonts/KaTeX_Size2-Regular.woff2

当我们查看控制台的网络选项卡时,它似乎试图下载类似这样的内容:
http://localhost:4200/t/my-topic/fonts/KaTeX_Size2-Regular.woff2

因此,浏览器正在查找与主题 URL 相邻的“fonts”文件夹,这显然是错误的。

我猜这都与 katex-bundle 中定义的 loadKaTeX 函数有关,我猜它以非标准的方式加载 KaTeX,导致 KaTeX 实际上不知道 CSS 文件在哪里。但我不知道如何修复它。

2 个赞

非常感谢你,Mark,我已经合并了你的提交,今天会看一下 KaTeX 的事情

这是仅通过针对校对员角色的自定义提示实现的吗?

不用担心,Mark 和我能处理好这件事。

3 个赞

两方面都很棒!

完全正确——是的。很幸运“校对 (Proofread)”这个描述与我想要它做的事情足够接近了。

3 个赞

我刚刚为 KaTeX 推送了一个修复,请告诉我是否有效,我需要请 @david 确认它是否安全,我们加载 CSS 的模式与 CSS 文件中的相对链接不兼容,因为我们正在嵌入一个样式表。

2 个赞

注意,我已将此内容移至一个新的专门主题,因为它在主要的数学主题中变得有些迷失和嘈杂。我非常期待这次升级,我觉得我们非常接近了。

5 个赞

在我看来,您的最新提交后 KaTeX 运行正常!

看起来有些测试没有通过,但我同意所有功能都已实现。

我也很兴奋!:rocket:

4 个赞

如果有人迫不及待想试用这个新版本,或者(像我一样)因为几天后就要有课程使用它而等不及了,那么你可以从这里安装这个独立版本:

我基于这个提交,我相信,将其更改为从内容分发网络 (CDN) 而不是内部加载 MathJax。

你可以在我的 Discourse 站点上的这篇帖子中看到它的实际效果。

1 个赞

我认为值得指出的是,这次升级将远远不止是 MathJax 的升级。它还将

  • 放松解析,以便更好地与 LLM 协同工作,如此处所要求的那样,以及
  • 修复新富文本编辑器的问题,如此处所报告的那样。
2 个赞

@sam@david

我看到这个拉取请求(pull request)已经被合并了,我也注意到你们两位为此付出了相当大的努力才最终完成——所以非常感谢你们!

我暂时不打算安装这个版本,因为我的 Discourse 站点上已经可以正常使用了;不过我确实有几个问题。

  1. 关于发布计划:代码已经在 GitHub 上的 main 分支中出现了。我猜如果有人今天安装一个新的 Discourse 实例,他们会自动获得这个最新版本的数学插件。这是正确的吗?
  2. 关于加载器:据我从代码中了解到的情况,似乎在核心中定义 loadMathjaxloadKatex 函数的想法被放弃了。最新版本似乎又恢复使用 loadScript,但我不太清楚这个脚本是从哪里来的。是这样吗?如果是,为什么呢?

再次感谢!

3 个赞

我目前在相当多的数学密集型生产实例上运行的是 latest-release +17。

很高兴看到 [grid] 现在在 Meta 上可以正常工作了——这对数学密集型帖子来说是一个很大的质量改进。我乐意在需要时对 [center] 进行妥协。

仅供参考,我之前遇到了在 [grid] / [details] 内部使用数学公式的一些边缘情况,我在这里记录了(以防仍然有用):

再次感谢所有致力于 MathJax 4 升级的人——看到这种程度的完善真是太棒了。

2 个赞

在使用 $$...$$ 内部使用 \begin{align}...\end{align} 时,我看到了 MathJax 的“公式结构嵌套错误”(Erroneous nesting of equation structures)。这似乎是 MathJax 在 v4 升级工作中更严格地执行了“不要嵌套公式环境”的规则。

在实践中,可靠的 Discourse 模式是在 $$ 包装器内部使用 aligned

$$\n{\large\n\begin{aligned}\na \u0026= b \\\\\n  \u0026= c\n\\end{aligned}\n}\n$$

这避免了将一个显示公式结构(align)嵌套在另一个显示包装器($$...$$)内部,而这正是触发错误的原因。

1 个赞

我同意你的分析,@Ethsim2

此行为与 MathJaxV4 以及纯 LaTeX 一致,所以我想这里没有“错误”。当然,值得指出的是,使用 aligned 而不是 align 是更好的选择!

1 个赞