让PageDown和MathJax一起工作
我正在实现一个看起来非常像math.stackexchange.com上的UI :
- 使用花哨的Markdown就像你习惯于stackoverflow一样
- 在
$
…$
-signs之间使用MathJax解析公式。
所以我下载了PageDown演示并进行了设置,效果非常好。 现在我尝试在每次更改时动态加载MathJax。
MathJax为这种方法得到了一个例子 ,但我无法让它运行。 这就是“我的”代码:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"],["\\(","\\)"]] } }); $("#wmd-input").keypress(function(event){ UpdateMath($(this).val()); }); (function () { var QUEUE = MathJax.Hub.queue; // shorthand for the queue var math = null; // the element jax for the math output. QUEUE.Push(function () { math = MathJax.Hub.getAllJax("#wmd-preview")[0]; }); window.UpdateMath = function (TeX) { QUEUE.Push(["Text",math,"\\displaystyle{"+TeX+"}"]); } })();
(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 。