最近折腾了下对 mathjax 的支持,用 mathjax-node 库。
由于 markdown 会直接处理一些公式里的符号所以先用 mathjax 处理一遍 markdown 的文本,然后再交给 marked 处理。
然后发现 mathjax 会把一些代码块里的东西当作公式处理,于是整个代码块没法看了...
(特别是 nginx 配置或者 perl 语法里会出现此类情况)
尝试过对一些字符进行 escape 之后丢给 mathjax ,处理完再替换回来交给 marked ,不过明显 coverage 不够,还是会在很多格式下被绕过。
还有一个思路但是尚未尝试,就是用什么方法可以检测到 mathjax 公式用特殊符号替换掉, marked 处理完之后再替换回来把 html 交给 mathjax 处理。
各位有什么比较好的方案可以在不损失功能的情况下让二者并存么?
1
sengxian 2015-12-01 18:26:33 +08:00
虽然我也没搞过,但我觉得 farbox.com 处理的还行,不过 \( \( 的行内公式 要变成 \\( \\(
|
2
kingcos 2015-12-01 18:36:32 +08:00
同问。。。之前 Hexo 用的这个插件
http://catx.me/2014/03/09/hexo-mathjax-plugin/ |
3
seqs 2015-12-01 18:39:30 +08:00 2
说下我的方案吧, mathjax 公式外层增加识别串,例如:
^^^mathjax f(x) = \int_{-\infty}^\infty \hat f(\xi)\,e^{2 \pi i \xi x} \,d\xi ^^^ marked 处理前先匹配出该串,将该串哈希 ID 替换原字符串,并存放到变量中, marked 解析完毕,再将哈希 ID 替换回原内容并做解析。 可以参考这里: https://github.com/seqs/tractor/blob/master/app/helpers/markdown.js#L81 我这里用的 KaTeX |
4
chengzhoukun 2015-12-01 19:39:59 +08:00
IPython notebook 处理挺好的,不知原理
|
5
dtysky 2015-12-01 19:42:57 +08:00 via Android
我都是直接写 html 然后引用 js 解析。。
|
6
phoenixlzx OP |
7
dqh3000 2015-12-01 20:00:54 +08:00
@seqs
我也是这么做的 ``` converted = converted.replace(/\$\$((?!\$\$)[^\0]){0,1024}\$\$|\$((?!\$)[^\0\r\n]){0,128}\$/g, function (match) { var possibleMath = match; while (possibleMath[0] == "$") possibleMath = possibleMath.substr(1); while (possibleMath[possibleMath.length - 1] == "$") possibleMath = possibleMath.substr(0, possibleMath.length - 1); var math = null; try { math = katex.renderToString(possibleMath); } catch (e) {} if (math) { mathArray.push(math); return "[MATH-" + (mathArray.length - 1).toString() + "]"; } return match; }); converted = marked(converted); }; ``` 这种感觉的 |
8
halmstad 2015-12-01 20:47:31 +08:00
凤凰君, mathjax-node 对中文支持有问题
|
9
phoenixlzx OP .... 公式里会有中文嘛?
|
10
phoenixlzx OP |