让PageDown和MathJax一起工作

我正在实现一个看起来非常像math.stackexchange.com上的UI :

  1. 使用花哨的Markdown就像你习惯于stackoverflow一样
  2. $$ -signs之间使用MathJax解析公式。

所以我下载了PageDown演示并进行了设置,效果非常好。 现在我尝试在每次



(function () { var converter1 = Markdown.getSanitizingConverter(); var editor1 = new Markdown.Editor(converter1); editor1.run(); })();

每次触发keypress事件时,此代码段都应更新预览。 而不是在页面上加载,tex被渲染得很好,但是一旦我开始输入, $$代码就打印在预览框中。

我已经创建了一个基本的例子 ,说明如何通过稍微修改Stack Exchange的mathjax-editing.js来使Pagedown和MathJax一起工作。

Stack Exchange的代码基于Davide Cervone的, 见他对另一个答案的评论 。

可以在github上查看该示例的代码。

您当前的设置存在一些问题。 首先,您借用的示例是更新单个方程的示例,而不是包含多个方程的段落。 为此,您需要考虑第二个动态示例 (来自MathJax 示例页面 )。 您应该在浏览器控制台中收到一条与null值有关的错误消息(除非您在编辑器中开始使用某些数学运算,否则math将为null )。

但还有第二个问题,即wmd编辑器将更新wmd-preview区域,你应该与它协调以进行MathJax更新,否则它可能会改变div的内容,而MathJax正在处理它。 Wmd在更新时比在每个按键上更聪明(例如,箭头键不会导致更新),因此协调也会更有效。 Wmd的SE版本有钩子允许你这样做,我怀疑你正在使用的那个也做。

最后,你将不得不做更多的工作来保护Markdown引擎中的数学,这样当Markdown出现在数学中时,下划线和反斜杠之类的东西不会被Markdown处理。 这有点棘手,但如果没有这个,你将遇到很多问题,你的TeX代码没有得到正确的处理。

要处理最后两个问题,您可以考虑查看MSE用于将MathJax挂钩到wmd的代码。 也许这会给你一些关于如何做到这一点的线索。

我只是将标记 (另一个Markdown库而不是Pagedown)和“MathJax”组合成“markdown + mathjax实时编辑器”。

请参阅演示: http : //kerzol.github.io/markdown-mathjax/editor.html

并获取源: https : //github.com/kerzol/markdown-mathjax

Stack Overflow上的Geoff Dalgas刚刚发布了他们的MathJax + PageDown集成代码作为要点 。 有关更多详细信息,请参阅Metapost 。