Hexo博客中会遇到mathjax公式渲染出现问题的情况,原来是markdown和mathjax的渲染出现冲突,本文解决冲突。
症状
在网上找到的MathJax的公式,直接粘贴到Markdown文档中发现,显示格式不正确。比如:1
2
3
4mathjax的大括号
$$\{x\}$$
mathjax的换行符
$$f(b) = \begin{cases} b[1] \\ b[2] \end{cases}$$
在hexo中的实际效果为
$${x}$$
$$f(b) = \begin{cases} b[1] \ b[2] \end{cases}$$
我的大括号呢?说好的换行符呢?怎么不显示了?
分析
在hexo生成中,markdown会将文档先一步渲染,将某些字符转义,之后再是MathJax的渲染。在这个过程中会有冲突。
对于大括号,markdown渲染器会将\{
或是\}
转义为{
或是}
,再等到MathJax渲染的时候当然就不对了。因为\
没了啊。
对于换行符,markdown渲染器会将\\
转义为\
,再到MathJax渲染的时候发现就剩一个了,所以就不换行了。
解决方法
网上的一些解决方式都是修改mark.js中的正则表达式,来限制markdown的转义。或是npm安装一些东西来控制这些。有点粗暴。
遇到类似的情况,发现是markdown先转义了,我的解决方法是,允许markdown转义,但要保证轮到MathJax转义的时候表达式是正确的。1
2
3
4mathjax的大括号
$$\\{x\\}$$
mathjax的换行符
$$f(b) = \begin{cases} b[1] \\\\ b[2] \end{cases}$$
改成上边这样,结果实际效果就正确了。
$$\{x\}$$
$$f(b) = \begin{cases} b[1] \\ b[2] \end{cases}$$