源自 个人博客
咱们平时使用markdown写文档的时候,免不了会碰到数学公式,好在有强大的Mathjax,能够解析网页上的数学公式,与hexo的结合也很简单,能够手动加入js,或者直接使用hexo-math插件.大部分状况下都是能够的,可是Markdwon自己的特殊符号与Latex中的符号会出现冲突的时候:node
—
的转义,在markdown中,_
是斜体,可是在latex中,却有下标的意思,就会出现问题。hexo默认使用marked.js
去解析咱们写的markdown,好比一些符号,_
表明斜体,会被处理为<em>
标签,
好比x_i
在开始被渲染的时候,处理为x<em>i</em>
,这个时候mathjax就没法渲染成下标了。
不少符号都有这个问题,好比粗体*
,也是没法在mathjax渲染出来的,好在有替代的乘法等,包括\\
同理。
因此说到底,是hexo使用的markdown引擎的锅,由于不少其它引擎在这方面处理的很好。git
在网上查了一写资料,总结为以下的方法github
这个方法最直接,须要转义我就转义。好比我须要在公式中写下标符号,那就修改写法写为: $x\_i$
;须要换行就使用\\\\
,便可。
很明显,这种方式虽然能够解决问题通用性不好,好比想迁移到其它地方,就没法识别了,由于大部分的markdown引擎是没有这个问题的。npm
咱们知道在markdown中的两个`之间的东西不会转义,正好符号咱们的需求,咱们保护$$之间的代码不被markdown渲染,这样就能够,可是有一个后遗症,就是的样式问题, markdown中是code的样式的,这样也仍是有问题,解决思路就是从新处理code标签,使其碰见$$的话,跳过,详情见:解决 MathJax 与 Markdown 的冲突
这个方法有个问题,就是有时候咱们的代码中会有$$的出现,这时候,仍然使用mathjax就有可能出现没法预料的结果了。markdown
这个是我目前使用的方法,直接换发动机,就是把hexo默认的渲染markdown的引擎换掉。查到了有以下几个插件可使用:hexo
下面说一下如何使用pandoc渲染。.net
就是卸载hexo默认的markd,再安装新的:插件
npm uninstall hexo-renderer-marked --save npm install hexo-renderer-pandoc --save
若是决定要换的话,仍是更换为Pandoc吧,虽然比较笨重,须要首先安装Pandoc, 不过的确能够完美解决上述的不兼容问题,虽然它的语法与markdown有些微的差别,不过经常使用的几乎都同样。code
这种方法,相对来讲,通用性较高的一种方式。思路就是修改hexo的渲染源码: nodes_modules/lib/marked/lib/marked.js
:blog
\\
的额外转义_
,由于markdown中有*
能够表示斜体,—
就去掉了。具体思路参考了使Marked.js与MathJax共存, 打开nodes_modules/marked/lib/marked.js
:
第一步: 找到下面的代码:
escape: /^\\([\\`*{}\[\]()# +\-.!_>])/,
改成:
escape: /^\\([`*{}\[\]()# +\-.!_>])/,
这样就会去掉\\
的转义了。
第二步: 找到em的符号:
em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
改成:
em:/^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
去掉_
的斜体含义,这样就解决了。为何说通用性很高,由于咱们没有修改文章的内容,能够放到别的引擎下也会顺利渲染,不过可能会遇到一些未知也须要转义的字符,每次都修改。建议使用最后两种方法。