我用 org-publish 生成博客,博客中引用了代码块,代码的高亮颜色,就是当前 Emacs 主题的颜色,生成的颜色是内联在 HTML 标签上的。
内联的样式往往优先级很高,一方面不好覆盖,一方面我也没有类名可以定位到这些代码, 所以我没办法基于博客主题颜色,切换不同的代码高亮颜色,一直以为只能这样了。
最近看了一下 org-publish 的代码高亮逻辑,发现可以将 org-html-htmlize-output-type 设置为 css,生成的代码块就会有对应的类名,样式也不是内联的。
再通过 org-html-htmlize-generate-css,可以基于当前的 Emacs 主题生成对应的代码高亮用的 CSS,选择一个喜欢的亮色主题和一个暗色主题,分别生成一份 CSS,将两份 CSS 合并,用 light-dark() - CSS | MDN 去设置亮色/暗色主题的颜色,这样代码高亮就能够基于亮色/暗色主题切换了。
如果你也是用 org-publish 或者 ox-html 生成 HTML 文件,应该都能这么操作。
感兴趣也可以看看我的博客,相关折腾记录在这:让博客的代码高亮适配主题