1

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

根据MathJax 站点上的文档页面,您可以在 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\"]);")

在浏览器中生成一条错误消息,指出“错误:无法从给定数据进行回调”。

另外:假设我可以获得正确的语法以进行排版,任何有关如何设置externsfigwheel文件以用于优化构建的指导将不胜感激。

4

2 回答 2

3

你很近。我认为您只需要将 Clojure 向量放入 JavaScript 列表即可。您可以使用#js阅读器宏:

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

是我自己的一个项目中的一行代码,尽管它使用的语法略有不同。

更新:更改TypeSetTypeset.

于 2018-05-23T01:15:11.730 回答
0

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


查看MathJax 示例

<!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>

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

于 2018-05-22T23:50:53.523 回答