Задержка MathJax обработки определенных элементов

У меня есть сайт с простым текстом, смешанным с разделами, где изначально виден только заголовок. Нажатие на заголовок расширяет раздел. Все части этой страницы могут содержать математику, которую я хочу красиво набирать с помощью MathJax, но разделы могут быть очень длинными и содержать много математики. Я хотел бы отложить обработку каждого раздела, пока не будет нажат соответствующий заголовок. Это возможно?

Я знаю, что MathJax имеет TypeSet функции, которые я могу вызывать при отображении раздела, поэтому динамическая типизация математики не является проблемой. Я также нашел elements опция конфигурации, но это противоположно тому, что я хочу: она позволяет обрабатывать только определенные элементы, а я хочу исключить определенные элементы.

Пример страницы: http://jsfiddle.net/pnbjh5tg/

1 ответ

Решение

Я нашел способ сделать это. По сути, я упустил из виду ignoreClass опция препроцессора tex2jax. Добавление класса tex2jax_ignore для всех разделов убедитесь, что они не обрабатываются при загрузке страницы. Следующий JavaScript затем обрабатывает их при нажатии на их заголовок:

var section = $(this).parent().children('.section-container');
section.removeClass("tex2jax_ignore");
MathJax.Hub.Queue(["Typeset",MathJax.Hub,section.get(0)]);

Результат можно увидеть в этом jsFiddle.

В текущей версии MathJax (v3.0.1), вы делаете это, добавляя

typeset: false

в вашем сценарии конфигурации. (Исходный код MathJax) Затем вы можете запуститьMathJax.typeset() из JS, когда вы хотите набрать документ.

См. Этот jsFiddle для демонстрации.

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