如何在Markdown中使用MathJax,就像数学StackExchange一样

26

更新的帖子

好的,我已经成功让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
    })
});

现在的问题是:我认为Markdown在数学渲染之前进行了解析,MathJax如何更改?我该如何解决这个问题?我认为在Math StackOverflow上已经解决了这个问题,但是怎么做呢?我需要停止Markdown解析数学公式。

更新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()) );
    });
});

以下是旧帖

在Math StackExchange中,我可以使用Markdown和MathJax。 我想知道我需要怎么做? 我可以使用像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


在 Markdown 处理 HTML 之前使用 MathJax 是聪明的做法,但这意味着数学公式将被渲染到任何地方。例如,在 literal 文本中,你可能不清楚要将其呈现出来。 - Beni Cherniavsky-Paskin
这个回答解决了你的问题吗?让 PageDown 和 MathJax 协同工作 - TylerH
2个回答

5

最快的方法是保护你的Markdown解析器中的数学公式。

请参阅Davide Cervone的详细回答,其中包括math.SE使用的代码链接。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接