为了帮助理解,我在那篇 Nature
文献分享的博文里加入了几个数学公式。经过优化算法课的锤炼,我打这些 LaTex
公式已经轻车熟路,比我做 PPT 用的 MathType
可舒服多了。但当我写好博文用hexo s
进行本地预览的时候发现,原本在我的
Markdown 编辑器上能够预览的公式,都无法在网页上正常渲染出来。
在网上查找了一些资料,发现原因是 Hexo 的自带的渲染引擎 marked.js 并不支持显示 LaTeX 公式,解决的方法就是更换渲染引擎,比如使用 MathJax 和 KaTex。这两种引擎在 Next 主题中都已经支持,其中 MathJax 的速度比 KaTex 更慢但支持更好,这里以前者为例介绍使用方法。
配置文件
首先在themes/next/_config.yml
中找到mathjax
配置将其
enable: 1
2
3
4mathjax:
enable: true
per_page: true
cdn: //cdn.bootcss.com/mathjax/2.7.1/latest.js?config=TeX-AMS-MML_HTMLorMMLper_page
选项,它用来控制是否在每篇文章进行公式渲染。当其为
false 时引擎会渲染每一篇文章,为 true 时,只会渲染 Front Matter
中带有mathjax: true
标记的博文,比如: 1
2
3
4
5
6---
title: 文献阅读——The universal visitation law of human mobility
tags: 文献
date: 2022-06-07 21:28:54
mathjax: true
---
下载渲染器
要使 MathJax 顺利显示公式,还需要安装 Pandoc 或者 Kramed
中的任意一种渲染器(这里为什么需要两个渲染器呢,我的理解是,Markdown
会先被 Pandoc 解释为正确的格式,然后再交给 MathJax
渲染)。这里以前者为例,先卸载旧渲染器hexo-renderer-marked
,安装新渲染器hexo-renderer-pandoc
。
1
2npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-pandoc --save
装完之后美滋滋地hexo clean/g/d
三连,结果又遇到了新问题,执行命令时报错:
1
[ERROR][hexo-renderer-pandoc] pandoc exited with code 9: pandoc: Unknown extension: smart
hexo-renderer-pandoc
渲染器以外,还需要安装
Pandoc 本体,而出这个报错的根本原因是 Pandoc
的版本太低。这让我有些摸不着头脑,因为我根本没有安装 Pandoc
这一步,何来版本问题。使用命令pandoc -v
查看 Pandoc
版本,发现电脑上果然有一个 1.19.2.1 版的 Pandoc,是安装 Anaconda
时自带的。这样问题就简单了,直接conda update pandoc
更新至
2.0 以上的版本,再来一遍 hexo
三连,问题顺利解决,网页上的公式也正常显示了。
issue 中提到的另一个解决方案是将
node_modules\hexo-renderer-pandoc\index.js
中的改成
1 var args = [ '-f', 'markdown-smart'+extensions, '-t', 'html-smart', math]
1 var args = [ '-f', 'markdown'+extensions, '-t', 'html', math]
如果 Pandoc 是另外安装的,或者同时存在多个版本的
Pandoc,可以在环境变量中添加要使用的pandoc.exe
的位置,或者在根目录下的./_config.yml
中加入以下配置,手动指定路径:
1
2pandoc:
pandoc_path: C:/XXXX/XX/pandoc.exe