Обнаружить присутствие Math для обработки в MathJax - PullRequest
1 голос
/ 12 мая 2019

Я использую MathJax и у меня есть следующий сценарий:

Я хочу запустить некоторый код, когда страница содержит некоторое число Math, которое MathJax будет правильно обрабатывать и отображать

Рассмотрим этот пример:

<p>
This is a page containing an equation: $b^2 - 4ac$.
</p>

Здесь функция или что я могу использовать, вернет true. Но если на странице нет фрагмента кода TeX для обработки (или какого-либо кода в соответствии с тем, как MathJax был настроен для запуска), этот API вернет false.

Немного подробнее

Речь идет не об изменении конвейера рендеринга. MathJax в конце концов сделает свою работу, и я в порядке. Мне просто нужен надежный способ (надеюсь, предоставляемый библиотечным API), чтобы обнаружить, что на странице есть математика, которая потребует обработки.

Имеет ли MathJax функциональность, которую я могу использовать для получения этой информации? Также, для полноты, я добавляю способ настройки MathJax (встроенный):

<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX", "output/CommonHTML"],
    tex2jax: {
      inlineMath: [ ['$','$'], ["\\(","\\)"] ],
      displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
      processEscapes: true
    },
    "CommonHTML": { linebreaks: { automatic: true } }
  });
</script>
<script src="//mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML"></script>

С другой стороны ...

Если то, что я спрашиваю, на самом деле неосуществимо, то как насчет этого:

Могу ли я присоединиться к событию в конвейере рендеринга, чтобы я мог выполнить функцию обратного вызова, когда MathJax завершил рендеринг математики?

Я видел последовательность запуска MathJax и, возможно, в этом мой ответ. Однако я вижу, что триггер также запускается, когда на странице нет математики.


Troubleshoot

Я пытался обнаружить наличие классов, таких как MathJax_Preview или mjx-chtml, которые добавляются к генерируемым элементам. Но этот код ненадежен, так как должен запускаться после процесса рендеринга. И это добавляет время к вычислениям.

Я не могу найти API, который я ищу для запроса наличия математики для рендеринга, но кажется странным, что MathJax не раскрывает такую ​​вещь.

1 Ответ

1 голос
/ 12 мая 2019

Возможный обходной путь - создать собственный класс, затем проверить, присутствует ли этот класс в DOM, а затем динамически встраивать mathjax

Фрагмент с математикой:

var test  = document.querySelectorAll('.math2Process');

if(test.length>0){
  var mathJax_config = document.createElement('script');
  mathJax_config.setAttribute('type','text/x-mathjax-config');
  mathJax_config.text = `MathJax.Hub.Config({
      extensions: ["tex2jax.js"],
      jax: ["input/TeX", "output/CommonHTML"],
      tex2jax: {
        inlineMath: [ ['$','$'], ["\\(","\\)"] ],
        displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
        processEscapes: true
      },
      "CommonHTML": { linebreaks: { automatic: true } }
    });`
  var mathJax_script = document.createElement('script');

  mathJax_script.setAttribute('src','//mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML');

  document.head.appendChild(mathJax_config);
  document.head.appendChild(mathJax_script);
}
<p class="math2Process">
This is a page containing an equation: $b^2 - 4ac$.
</p>

тоже самое, но без математики:

var test  = document.querySelectorAll('.math2Process');

if(test.length>0){
  var mathJax_config = document.createElement('script');
  mathJax_config.setAttribute('type','text/x-mathjax-config');
  mathJax_config.text = `MathJax.Hub.Config({
      extensions: ["tex2jax.js"],
      jax: ["input/TeX", "output/CommonHTML"],
      tex2jax: {
        inlineMath: [ ['$','$'], ["\\(","\\)"] ],
        displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
        processEscapes: true
      },
      "CommonHTML": { linebreaks: { automatic: true } }
    });`
  var mathJax_script = document.createElement('script');

  mathJax_script.setAttribute('src','//mathjax.rstudio.com/latest/MathJax.js?config=TeX-MML-AM_CHTML');

  document.head.appendChild(mathJax_config);
  document.head.appendChild(mathJax_script);
}
<p>
This is a page containing an equation: $b^2 - 4ac$.
</p>
...