0%

Hexo使用Pandoc渲染带来的列表缩进问题及解决方案

0x00 起因

为了让数学公式在博客上被成功的渲染,我找了半天的教程。最后按照这篇next主题这篇官方指导来解决了公式渲染问题。

具体思路如下。

  1. 在 next/config.yml 文件中修改如下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Math Formulas Render Support
math:
# Default (false) 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 true, it will load mathjax / katex srcipt EVERY PAGE.
every_page: false

mathjax:
enable: true
# Available values: none | ams | all
tags: none

katex:
enable: false
# See: https://github.com/KaTeX/KaTeX/tree/master/contrib/copy-tex
copy_tex: false
  1. 删除原有的hexo-renderer-marked包,安装hexo-renderer-pandoc包。
1
2
3
4
$ npm un hexo-renderer-marked
- no output
$ npm i hexo-renderer-pandoc
- no output
  1. 安装 pandoc

0x01 问题

数学公式渲染得非常完美,但是markdown文档的无序列表出了问题。

起因在于我使用vscode编辑markdown文档,markdown使用两个空格来表示无序列表和子列表的缩进。

markdown格式并没有非常严格统一的标准,各家都有自己小小的不同。pandoc则默认使用4个空格来做列表和子列表的缩进。

0x02 解决

在网上查了一下,五年前就有人在pandoc项目下提出了相关的issue。程序员们为应该使用4个空格还是2个空格进行缩进吵得不亦乐乎。

issue串中有人提出了解决方案

Sorry about the necro post.

Using --tab-stop 2 in the command line will allow you to use 2 spaces for nesting lists. Not sure of this is a deprecated or undocumented feature, works in 1.17.0.2-win.

也就是说pandoc提供了 --tab-stop 2 这一标签来确定这类缩进的空格数。我们可以轻易的猜想到hexo使用了 hexo-renderer-pandoc这一npm包来调用pandoc以渲染markdown。

找到调用的js源代码并修改。

目录:myblog/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, '--tab-stop', '2']

其中,去掉两个smart是解决另一个bug。不在此赘述。