hexo正确渲染md/latex公式


我们平时使用markdown写文档的时候,免不了会碰到数学公式,好在有强大的Mathjax,可以解析网页上的数学公式,大部分情况下都是可以的,但是Markdwon本身的特殊符号与Latex中的符号会出现冲突的时候:

  • _的转义,在markdown中,_斜体_斜体,但是在latex中,却有下标的意思,就会出现问题。
  • \\的换行,在markdown中,\\会被转义为\这样也会影响影响mathjax对公式中的\\进行渲染

我从网上找到的解决办法大多都是使用pandoc提换markdown的渲染引擎:

hexo-render-pandoc

使用 hexo-render-pandoc, 可以避免上述提到的很多歧义问题步骤如下:

  1. 安装配置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.

  1. 主题配置打开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
  1. 文章的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>在多行公式渲染时依旧会出现异常,而使用则可以正常渲染。


文章作者: 庞贝堡垒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 庞贝堡垒 !
评论
  目录