Hexo建站日记(二)——在文章中显示数学公式

为了帮助理解,我在那篇 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
4
mathjax:
enable: true
per_page: true
cdn: //cdn.bootcss.com/mathjax/2.7.1/latest.js?config=TeX-AMS-MML_HTMLorMML
注意到下方还有一个per_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
2
npm 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
搜索时发现已经有人在 GitHub 项目下提了这个 issue。原来除了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
2
pandoc:
pandoc_path: C:/XXXX/XX/pandoc.exe