Использование 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>

это кажется простым. Можете ли вы привести пример того, что вы пытаетесь сделать?

Другие вопросы по тегам