当你搜索到并点开这篇博文的时候,你的公式渲染很可能也遇到问题了。当初我之所以选择Next主题,就是因为他支持MathJax,可以渲染公式。但是最近,我在浏览之前的博文的时候,突然发现有些数学符号没有被渲染出来。这些符号之前都是被正确渲染的:



但现在他们却都变成了这个样子:


不知道它们是从什么时候开始变成这样的,按理说之前它们好好的,突然变成这样,那应该是我对一些依赖包做了改动。

在此我将解决问题的过程做一个记录,很可能你出现的问题和我不太一样,但是我解决问题的过程文中给出的几个链接可能对你很有帮助。

事实上,我的确在最近执行过

1
npm update

这条命令,更新过一次依赖包,但问题是不是出在这里呢?

我先去百度了一下Next主题的MathJax渲染的问题。在简书的这篇博文里,找到了这样一段话:

Hexo默认使用"hexo-renderer-marked"引擎渲染网页,该引擎会把一些特殊的markdown符号转换为相应的html标签,比如在markdown语法中,下划线'_'代表斜体,会被渲染引擎处理为<em>标签。
……
类似的语义冲突的符号还包括'*', '{', '}', '\'等。

但是我当时在开启Next的渲染时,已经解决过上述问题了,在next下的_config.yml中,有详细的描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Math Equations Render Support
math:
enable: true

# Default (true) will load mathjax / KaTex script on demand.
# That is it only render those page which has `mathjax: true` in Front-matter.
# If you set it to false, it will load mathjax / KaTex srcipt EVERY PAGE.
per_page: true

engine: mathjax
#engine: KaTex

# hexo-renderer-pandoc (or hexo-renderer-kramed) needed to full MathJax support.
mathjax:
#cdn: //cdn.staticfile.org/MathJax/MathJax-2.6-latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML
cdn: //cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_HTMLorMML
# See: https://mhchem.github.io/MathJax-mhchem/
#mhchem: //cdn.jsdelivr.net/npm/mathjax-mhchem@3
#mhchem: //cdnjs.cloudflare.com/ajax/libs/mathjax-mhchem/3.3.0

# hexo-renderer-markdown-it-plus (or hexo-renderer-markdown-it with markdown-it-KaTex plugin) needed to full KaTex support.
KaTex:
cdn: //cdn.jsdelivr.net/npm/KaTex@0/dist/KaTex.min.css
#cdn: //cdnjs.cloudflare.com/ajax/libs/KaTex/0.7.1/KaTex.min.css

copy_tex:
# See: https://github.com/KaTex/KaTex/tree/master/contrib/copy-tex
enable: false
copy_tex_js: //cdn.jsdelivr.net/npm/KaTex@0/dist/contrib/copy-tex.min.js
copy_tex_css: //cdn.jsdelivr.net/npm/KaTex@0/dist/contrib/copy-tex.min.css

即第13行,需要安装hexo-renderer-pandoc或hexo-renderer-kramed插件来支持MathJax,我这里安装的是hexo-renderer-kramed。现在渲染有问题,是不是依赖包kramed的版本太高了?或者mathjax的cdn有问题?在重装了kramed稍微低一点的版本,更改了好几次cdn后,问题依旧。

既然是渲染的问题,我又去了GitHub的Next项目中,在这个issue里发现了一些渲染的问题,但很遗憾,并没有解决我的问题。在hexo-renderer-kramed项目的issue中我也没有发现类似的问题。

那我换成hexo-renderer-pandoc这个插件会不会渲染成功呢?于是,卸载之前的kramed,安装pandoc,然后

1
2
hexo clean
hexo g

终端报错,搜索无果,解决无望

不抛弃不放弃,看第11行,Next现在支持两种渲染引擎的嘛,mathjax不行换katex试试。而21行显示KaTex引擎需要hexo-renderer-markdown-it-plus插件的支持。于是我尝试更换为katex引擎,安装插件后执行

1
2
hexo clean
hexo g

问题更大了

终端报了一堆错误,并且在每一个中文字符后都有"Unicode"之类的字眼。搜索无果,我还是回到了GitHub的Next中,在数学公式——Katex——已知的问题 中,发现了这么一句话:

不支持 Unicode

也就是说,如果我的数学公式中出现了中文字符,包括中文的标点符号,都会报错。例如,下面的这句话KaTex就无法正确编译。

1
$对任意的x \in \mathbb{R}$

因此你要写成这样

1
对任意的$x \in \mathbb{R}$

而上面我出问题的这几个,都是带\或者\后面有内容的,但也并非所有的都不能渲染,像\rightarrow就能成功渲染为\rightarrow,\reals就渲染失败。

当时之所以用\reals,是因为我需要用的符号,在KaTex支持的符号中是这样的



而我现在用的引擎是MathJax,在MathJax支持的命令



根本就没有\Katex,并且所有带mediawiki-texvc这个标识的,在我现在配置的Next中也无法正常渲染…

。。。。。。。

于是我根据这篇博文尝试将\reals改成\mathbb{R},这下渲染正常了。