在 ClojureScript 中使用 MathJax

Using MathJax in ClojureScript

我想在 ClojureScript 程序中使用 MathJax 来排版一些数学 一个 DOM 元素,而不是整个页面(有效),只是这个特定的 DOM 元素。 (它是 Markdown 编辑器的实时预览面板,它也以 Latex 格式格式化数学。)

根据 MathJax 网站上的 this documentation page,您可以使用一些东西 在 JavaScript.

中像这样
MathJax.Hub.Queue(["Typeset", MathJax.Hub, latex-node]);

我一直在反复试验,但没有做对。像这样:

(defn typeset-latex
  [latex-node]
  (.Queue js/MathJax.Hub ["TypeSet" (.-Hub js/MathJax) latex-node]))

在运行时编译并且不会产生任何错误,但也不产生任何输出。

使用 js* 宏尝试重现文档页面上的方法:

(js* "MathJax.Hub.Queue([\"TypeSet\", MathJax.Hub, \"mde-preview-id\"]);")

在浏览器中生成一条错误消息,指出 "Error: Can't make callback from given data"。

ALSO:假设我可以获得正确的语法以在 figwheel 中进行排版,关于如何设置外部文件以用于优化构建的任何指南将不胜感激。

我不知道 MathJax,但这个模板 CLJS 项目有 3 种不同的方式从 ClojureScript 执行本机 JS 互操作的示例:


正在查看the MathJax example

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>MathJax example</title>
  <script type="text/javascript" async
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/latest.js?config=TeX-MML-AM_CHTML" async>
</script>
</head>
<body>
<p>
  When \(a \ne 0\), there are two solutions to \(ax^2 + bx + c = 0\) and they are
  $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
</p>
</body>
</html>

看起来很简单。你能举例说明你正在尝试做什么吗?

你很接近。我认为您只需要将 Clojure 向量制作成 JavaScript 列表即可。您可以使用 #js reader 宏:

(defn typeset-latex
  [latex-node]
  (.Queue js/MathJax.Hub #js ["Typeset" (.-Hub js/MathJax) latex-node]))

Here 是我自己的一个项目中的一行代码,虽然它使用的语法略有不同,但它们是等效的。

更新:将 TypeSet 更改为 Typeset