我们平时使用markdown写文档的时候,免不了会碰到数学公式,好在有强大的Mathjax,可以解析网页上的数学公式,大部分情况下都是可以的,但是Markdwon本身的特殊符号与Latex中的符号会出现冲突的时候:
_
的转义,在markdown中,_斜体_
是 斜体,但是在latex中,却有下标的意思,就会出现问题。\\
的换行,在markdown中,\\
会被转义为\
这样也会影响影响mathjax对公式中的\\
进行渲染
我从网上找到的解决办法大多都是使用pandoc提换markdown的渲染引擎:
hexo-render-pandoc
使用 hexo-render-pandoc, 可以避免上述提到的很多歧义问题步骤如下:
- 安装配置hexo-render-pandoc
npm un hexo-renderer-marked --save
#or npm un hexo-renderer-kramed --save (如果安装的是kramed的话)
# 在安装之前,建议先删除node_modules文件夹下所有文件
# 并运行命令 npm install
npm i hexo-renderer-pandoc --save
前去官网安装pandoc,并保证能在命令行中运行 pandoc -v.
- 主题配置打开mathjax开关
# MathJax Support
mathjax:
enable: true
cdn: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-MML-AM_CHTML # 使用cloudflare的cdn
- 文章的Front-matter里打开mathjax开关(一定要打开,不然不会渲染)
--- title: index.html date: 2016-12-28 21:01:30 tags: mathjax: true ---
但是pandoc比较笨重,需要首先安装Pandoc, 不过的确可以完美解决上述的不兼容问题,另外它的语法与markdown有些微的差异,需要注意。
分离markdown和latex
使用<div>
或者<span>
标签
针对有可能被转义的公式(如带换行符的),用<span>
或者<div>
标签将LaTeX公式包裹起来,这样公式内容就不会被markdown渲染器识别为转义字符。
比如:
$$
\begin{pmatrix}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33}
\end{pmatrix}
$$
\\
会无法识别导致不能换行,可以写成: <span>
$$
\begin{pmatrix}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23} \\
a_{31} & a_{32} & a_{33}
\end{pmatrix}
$$
</span>
渲染结果就正常了。
使用hexo自带的分离标记(推荐,简单)
在官方文档中提到了可以为hexo提供标记,阻止其按照自己的规则解释我们的字符串,显示其原本的含义
{% raw %}
...
{% endraw %}
这样就可以避免markdown解释器对我们的字符串进行转义,而是直接输出原本的字符串。
比如:
{% raw %}
$$
\begin{align*}
a &= b + c \\
&= d + e \\
&= f + g
\end{align*}
$$
{% endraw %}
我测试使用<div>
或者<span>
在多行公式渲染时依旧会出现异常,而使用则可以正常渲染。