250709 hexo-renderer-pandoc 报错

在处理一篇包含很多latex数学公式的post时出现了如下错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Error: 
[ERROR][hexo-renderer-pandoc] On D:\codedir\blog_source\source\_posts\250624-Compressed-Sensing-math.md
[ERROR][hexo-renderer-pandoc] pandoc exited with code 64: Error parsing YAML metadata at (line 407, column 1):
YAML parse exception at line 7, column 74:
mapping values are not allowed in this context

at Hexo.pandocRenderer (D:\codedir\blog_source\node_modules\hexo-renderer-pandoc\lib\renderer.js:47:9)
at Hexo.tryCatcher (D:\codedir\blog_source\node_modules\bluebird\js\release\util.js:16:23)
at Hexo.<anonymous> (D:\codedir\blog_source\node_modules\bluebird\js\release\method.js:15:34)
at D:\codedir\blog_source\node_modules\hexo\dist\hexo\render.js:73:28
at tryCatcher (D:\codedir\blog_source\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (D:\codedir\blog_source\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (D:\codedir\blog_source\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromiseCtx (D:\codedir\blog_source\node_modules\bluebird\js\release\promise.js:641:10)
at _drainQueueStep (D:\codedir\blog_source\node_modules\bluebird\js\release\async.js:97:12)
at _drainQueue (D:\codedir\blog_source\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (D:\codedir\blog_source\node_modules\bluebird\js\release\async.js:102:5)
at Async.drainQueues [as _onImmediate] (D:\codedir\blog_source\node_modules\bluebird\js\release\async.js:15:14)
at process.processImmediate (node:internal/timers:485:21)

看错误提示,开始以为是front-matter的问题,试了好几种格式,还从YAML换成了JSON,都没用。

后来才发现只是这一篇文档有问题,其他的文档都能正常编译。试着注释掉文档里的部分内容,虽然不能精准定位到到底是哪里出了问题,但是可以确定的是hexo-renderer-pandoc肯定是把部分文档内容识别成了front-matter。

于是尝试更换renderer,因为我用的是Next主题,Next主题支持两个数学公式引擎:MathJax和KaTex,前者好像兼容性更好些。但问题就在这里,使用MathJax的话就需要使用hexo-renderer-pandoc,如果使用KaTex,可以把renderer换成hexo-renderer-markdown-it-plus或者hexo-renderer-markdown-it。

https://theme-next.js.org/docs/third-party-services/math-equations
看起来使用hexo-renderer-markdown-it-plus方便点。按照文档里的命令

1
2
npm un hexo-renderer-marked
npm i hexo-renderer-markdown-it-plus

不过因为我现在的renderer是hexo-renderer-pandoc,所以第一条命令改成了

1
npm un hexo-renderer-pandoc

更换了renderer之后终于可以正常编译了。
真无语,花了两个小时才解决。