Как использовать Markdown с MathJax, например Math StackExchange

ОБНОВЛЕННОЕ СООБЩЕНИЕ

Хорошо, мне удалось заставить Markdown и MathJax работать вместе, на самом деле это было относительно просто. Я использовал marked вместе с MathJax.

$(function() {
    var $text       = $("#text"), // the markdown textarea
        $preview    = $("#preview"); // the preview div

    $text.on("keyup", function() {
        $preview.html( marked($text.val()) ); // parse markdown
        MathJax.Hub.Queue(["Typeset", MathJax.Hub, "preview"]); // then let MathJax do its job
    })
});

Теперь проблема в том, что я думаю, что уценка сначала анализирует мою математику, прежде чем MathJax сможет ее изменить. Как это исправить? Я думаю, что это исправлено в Math StackOverflow, но как? Мне нужно остановить уценку от разбора математики

ОБНОВЛЕНИЕ 2

Это работает, но не уверен, что это так, как это делает math.stackexchange, но, похоже, он дает аналогичные/те же результаты, что я тестировал до сих пор...

$(function() {
    var $text       = $("#text"),
        $preview    = $("#preview");

    $text.on("keyup", function() {
        $preview.html( $text.val() );
        MathJax.Hub.Queue(["Typeset", MathJax.Hub, "preview"]);
    });

    MathJax.Hub.Register.MessageHook("End Process", function (message) {
        $preview.html( marked($preview.html()) );
    });
});

СТАРЫЙ ЗАПИСЬ НИЖЕ

В математическом стеке обмена я могу использовать MathJax с Markdown. Интересно, что мне нужно для этого? Я могу использовать такую ​​библиотеку, как marked, для рендеринга Markdown, но для MathJax кажется, что он просто рендерится при загрузке страницы. Как я могу вызвать его для повторного рендеринга или, лучше, просто рендерить то, что нужно (указано мной)

html = marked("some markdown string") // a HTML string
// is there something like
html = MathJax.parse(html)

ОБНОВЛЕНИЕ

Думаю, мне следует взглянуть на http://www.mathjax.org/docs/1.1/typeset.html#manipulating-individual-math-elements. Но когда я пытаюсь

$text.on("keyup", function() {
    $preview.html( marked($text.val()) );
    var math = MathJax.Hub.getAllJax("preview");
    console.log(math);
    MathJax.Hub.Queue(["Text", math, "a+b"]);
})

Где:

  • $text: это элемент jQuery для моей текстовой области
  • $preview: предварительный просмотр div

Я обнаружил, что math не определено, поэтому кажется, что var math = MathJax.Hub.getAllJax("preview") не работает. У меня есть div#preview кстати.


person Jiew Meng    schedule 22.08.2012    source источник
comment
Выполнение MathJax до уценки разумно (уценка пропускает html), но это означает, что математика будет отображаться везде. Например, неясно, хотите ли вы, чтобы это отображалось в literal тексте.   -  person Beni Cherniavsky-Paskin    schedule 10.03.2014
comment
Отвечает ли это на ваш вопрос? позволить PageDown и MathJax работать вместе   -  person TylerH    schedule 08.10.2020


Ответы (2)


Самый быстрый способ — защитить математику от вашего парсера уценки.

См. этот вопрос для подробного ответа Давиде Червоне, в том числе ссылка на код, используемый math.SE.

person Peter Krautzberger    schedule 24.08.2012

Для возвышенного добавьте следующий код в Markdown Preview --> Settings - User,

{
    /*
        Enable or not mathjax support.
    */
    "enable_mathjax": true
}

как показано ниже,

введите здесь описание изображения

См. Как включить рендеринг MathJax в Sublimetext Markdown Preview.

person SparkAndShine    schedule 10.02.2017