在ClojureScript中使用MathJax

时间:2018-05-22 21:44:27

标签: clojurescript mathjax clojurescript-javascript-interop

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

根据MathJax网站上的this documentation page,你可以使用一些东西 像这样在JavaScript中。

import static org.mockito.Mockito.verify;

import static org.mockito.Mockito.never;

//Testing scenario

verify(mockObject, never()).someMethod(mockParam1, MockParam2);

我一直在使用反复试验并且没有把它弄好。像这样:

MathJax.Hub.Queue(["Typeset", MathJax.Hub, latex-node]);

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

使用(defn typeset-latex [latex-node] (.Queue js/MathJax.Hub ["TypeSet" (.-Hub js/MathJax) latex-node])) 宏尝试在文档页面上重现该方法:

js*

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

ALSO :假设我可以正确使用(js* "MathJax.Hub.Queue([\"TypeSet\", MathJax.Hub, \"mde-preview-id\"]);") 中的排版工作语法,那么有关如何设置externs文件以便与优化版本一起使用的任何指导都将受到赞赏。< / p>

2 个答案:

答案 0 :(得分:3)

你很亲密。我想你只需要将Clojure向量放入JavaScript列表中。您可以使用#js阅读器宏:

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

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

更新:将TypeSet更改为Typeset

答案 1 :(得分:0)

我不了解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>
这似乎很简单。你能举例说明你想做什么吗?