# 添加 KaTeX 会有多困难？

**URL:** <https://meta.discourse.org/t/how-dificult-would-it-be-to-add-katex/253654>\
**Category:** Feature\
**Tags:** math, completed\
**Created:** [2018年八月10日 08:53 UTC](https://meta.discourse.org/t/how-dificult-would-it-be-to-add-katex/253654 "2018-08-10T08:53:15Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![danekhollas](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/danekhollas/32/79637_2.png) [@danekhollas](https://meta.discourse.org/u/danekhollas)\
**Post date:** [2018年八月10日 08:53 UTC](https://meta.discourse.org/t/how-dificult-would-it-be-to-add-katex/253654/1 "2018-08-10T08:53:15Z")

</div>

我想知道集成 KaTeX 会有多困难，是否有人正在考虑此事。他们的代码似乎正在快速成熟。

在我们这种情况下，这样做还有一个额外的好处，即让关于“可汗学院翻译”的论坛上的渲染效果与可汗学院保持一致。

---

<div class="post-metadata">

**Author:** ![jks](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jks/32/101841_2.png) [@jks](https://meta.discourse.org/u/jks)\
**Post date:** [2018年八月12日 20:18 UTC](https://meta.discourse.org/t/how-dificult-would-it-be-to-add-katex/253654/2 "2018-08-12T20:18:49Z")

</div>

我拼凑了一些代码，用于在服务器上渲染公式：

> <https://github.com/discourse/discourse-math/pull/12>
>
> Not ready for merging but this could be interesting to discuss

目前还没有错误处理，字体大小也与客户端版本不完全匹配，但在我的开发环境中看起来基本可以正常工作。

---

<div class="post-metadata">

**Author:** ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)\
**Post date:** [2018年八月12日 21:40 UTC](https://meta.discourse.org/t/how-dificult-would-it-be-to-add-katex/253654/3 "2018-08-12T21:40:51Z")

</div>

我非常喜欢这个想法，在某些情况下应该能显著提升性能，并开始解锁电子邮件支持！不过我们仍需要在某个时候将 SVG 转换为 PNG 以用于电子邮件。

但出于无障碍考虑，必须将其设为可选。

@danekhollas 我支持添加可选 KaTeX 的 PR。

---

<div class="post-metadata">

**Author:** ![danekhollas](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/danekhollas/32/79637_2.png) [@danekhollas](https://meta.discourse.org/u/danekhollas)\
**Post date:** [2018年八月13日 00:22 UTC](https://meta.discourse.org/t/how-dificult-would-it-be-to-add-katex/253654/4 "2018-08-13T00:22:57Z")

</div>

由于插件开发目前远超我的能力范围，我只是想尝试通过自定义主题添加 KaTeX，使用 [autorender KaTeX 扩展](https://khan.github.io/KaTeX/docs/autorender.html)。它勉强能工作，但我遇到了一个关于支持单个 $ 符号作为数学分隔符的问题。

看起来，即使我关闭了 MathJax 数学插件，被 包围的文本仍会被转换为 `<span class="math">` 标签内的文本，并且美元符号会消失。奇怪的是，我在 META 上无法复现此问题。有什么建议吗？

 ![image](https://global.discourse-cdn.com/meta/original/3X/3/3/332d972ae3c8b3b65b018e455c45cf36d46ff40c.png)

在这个 [KaTeX GitHub 问题](https://github.com/Khan/KaTeX/issues/712) 的末尾，有人报告了一个非常类似的问题，该问题被追踪到是 Kramdown 自动转换导致的……

---

<div class="post-metadata">

**Author:** ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)\
**Post date:** [2018年八月13日 00:26 UTC](https://meta.discourse.org/t/how-dificult-would-it-be-to-add-katex/253654/5 "2018-08-13T00:26:15Z")

</div>

是的，自动渲染功能在 Discourse 上极有可能非常不稳定。我们依赖于正确的钩子来“装饰”在添加到 DOM 时正在处理的 HTML 块。我们必须以正确的方式完成这项工作。

也许 @misaka4e21 可以看看是否能让数学插件中的 KaTeX 默认关闭并设为可选？

---

<div class="post-metadata">

**Author:** ![misaka4e21](https://avatars.discourse-cdn.com/v4/letter/m/c57346/32.png) [@misaka4e21](https://meta.discourse.org/u/misaka4e21)\
**Post date:** [2018年八月14日 06:53 UTC](https://meta.discourse.org/t/how-dificult-would-it-be-to-add-katex/253654/6 "2018-08-14T06:53:26Z")

</div>

> <https://github.com/discourse/discourse-math/pull/13>

---

<div class="post-metadata">

**Author:** ![danekhollas](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/danekhollas/32/79637_2.png) [@danekhollas](https://meta.discourse.org/u/danekhollas)\
**Post date:** [2018年八月14日 22:27 UTC](https://meta.discourse.org/t/how-dificult-would-it-be-to-add-katex/253654/7 "2018-08-14T22:27:01Z")

</div>

哇，速度真快，非常感谢！

有一点需要考虑。与 MathJax 相比，KaTeX 仍缺少某些功能。在 Khan Academy 中，当 KaTeX 失败时，它们实际上会回退到 MathJax。一旦服务端渲染到位，实施这一点可能很有意义，否则您将始终需要同时分发 KaTeX 和 MathJax，这很可能是不理想的。

---

<div class="post-metadata">

**Author:** ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)\
**Post date:** [2018年八月14日 22:45 UTC](https://meta.discourse.org/t/how-dificult-would-it-be-to-add-katex/253654/8 "2018-08-14T22:45:57Z")

</div>

您如何决定何时进行回退？我很好奇，这是否也可以在客户端进行决定？

---

<div class="post-metadata">

**Author:** ![danekhollas](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/danekhollas/32/79637_2.png) [@danekhollas](https://meta.discourse.org/u/danekhollas)\
**Post date:** [2018年八月14日 23:12 UTC](https://meta.discourse.org/t/how-dificult-would-it-be-to-add-katex/253654/9 "2018-08-14T23:12:20Z")

</div>

我并没有直接参与，但我的猜测是，当 KaTeX 抛出错误时，他们会使用 MathJax？  
而且我非常确定他们也在客户端这样做。

如需更多信息，我建议直接在他们的 [GitHub](https://github.com/khan/katex) 上向他们询问。

---

<div class="post-metadata">

**Author:** ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)\
**Post date:** [2023年二月1日 10:23 UTC](https://meta.discourse.org/t/how-dificult-would-it-be-to-add-katex/253654/10 "2023-02-01T10:23:47Z")

</div>


