背景
PaperMod 主题默认使用的是 highlight.js, 这是一种由 js 生成的高亮方案。相比 highlight.js, Hugo 官方更倾向使用 Chroma 来生成代码高亮。
Chroma 是由 Go 写的语法高亮工具,其编译速度更快,且 Hugo 内置了 Chroma 工具。Hugo 关于 Chroma 的文档在 Syntax Highlighting
禁用 Highlight.js
highlight.js 与 Chroma 的样式是冲突的。
按照 FAQs 提到的方案,我们首先需要通过 params.assets.disableHLJS
禁用 Highlight.js. 具体配置为:
|
|
高亮配置
在项目根目录下面找到配置文件 config.yml,增加以下配置:
|
|
其中,lineNos
的含义为是否显示行号,一般建议开启。noClasses
这个配置项的含义并不那么清晰,在查阅了资料后得知:生成代码高亮有两种方式,一种是直接在代码块上进行样式内联,第二种就是在代码块上面增加 CSS 类。该配置项的意思是说是否不生成 CSS 类,即直接嵌套 CSS 内联样式。
显然,使用 CSS 类后,生成的 HTML 会更加简短、美观。所以在这里我就设置为了 false.
设置 false 意味着,本来他在把样式直接写到 HTML 中,但你关闭了这个功能,那么就需要你自己生成代码高亮的样式。
生成 CSS 类
|
|
通过 hugo gen 命令可以生成 Chroma 的样式,在 PaperMod Wiki 中也有提到,凡是在 assets/css/extended
下的 css 文件,都会被自动加载。具体描述参考 FAQs
Hugo 支持的代码高亮样式可以[点击这里](Chroma Style Gallery)
覆盖系统样式
至此,Chroma 的样式其实已经生成好了,按理说应该不会有问题才对。事实上,这里有一个比较坑的地方在于,PaperMod 将代码块的背景颜色写死了。这意味着不管你使用什么样式的高亮代码,生成的代码的背景颜色都会被系统配置所覆盖。
为了解决这个问题,我们需要 unset 掉 hljs-bg
这个变量。
在 assets/css/extend/custom.css 中添加以下样式:
|
|
这样系统默认的样式就被清理掉,页面上显示的就是通过 hugo gen
生成的配色。