Использование MathJax в ClojureScript
Я хочу использовать MathJax в программе ClojureScript для набора некоторой математики в элементе 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\"]);")
выдает в браузере сообщение об ошибке, в котором говорится: "Ошибка: невозможно выполнить обратный вызов из данных".
ТАКЖЕ: Предполагая, что я могу получить правильный синтаксис, чтобы набор текста работал в figwheel
Любое руководство по настройке файла externs для использования с оптимизированной сборкой будет оценено.
2 ответа
Ты рядом. Я думаю, вам просто нужно превратить вектор Clojure в список JavaScript. Вы можете использовать #js
читатель макрос:
(defn typeset-latex
[latex-node]
(.Queue js/MathJax.Hub #js ["Typeset" (.-Hub js/MathJax) latex-node]))
Вот строка кода в одном из моих собственных проектов, которая эквивалентна, хотя и использует немного другой синтаксис.
Обновление: изменить TypeSet
в Typeset
,
Я не знаю насчет MathJax, но этот шаблонный проект CLJS содержит примеры 3 разных способов выполнения нативного взаимодействия JS из ClojureScript:
Глядя на пример 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>
это кажется простым. Можете ли вы привести пример того, что вы пытаетесь сделать?