如何配置一个学术写作博客(二)
有关我的博客的初步的探索中已经列出一系列好用的hexo主题和插件,但仍留有三个问题没有解决:TOC中的参考文献无法取消自动编号;bib文件需要手动生成;graphviz的dot文件也必须手动生成。其中第一个问题因我为hexo贡献了代码而得到了解决,后两个问题则延续到了今天。曾经的解决方案,预处理脚本,不能让
hexo-server监听到上述两种文件的变化。本文将提供相对完美的解决方案,使需要重新绘图或者更新引用的时候,hexo-server可以自动更新。
hexo
去年刚刚开始使用hexo的时候,所选hexo版本为5.4.0。不久前本站升级到了6.1.0,因为hexo从该版本开始才实装了我的贡献:TOC中的参考文献可以取消自动编号,就如本文的附录一样。
hexo主题
我的hexo主题hexo-theme-yuzu更新到了2.2版本(或许不久就要更新2.3了)。
相比于去年,JS代码稍微多了点,但我已经非常克制了……
比较重要的更新,大概是:
- 自动切换浅色/深色模式
- 代码块添加复制按钮
- TOC移动到了文章上方
学术博客上方的两朵乌云
bibliography的解决方案
查阅pandoc文档发现,可以为每个md文件指定对应的bib文件,使用方法是在metadata里加入bibliography: file.bib这样的选项。
尝试后发现,引用失败。
Debug发现,hexo的renderer接口并不会把metadata段(每个文件开头三个减号里的内容)传给renderer。因此,我们需要分别写两个metadata段,一个给hexo,一个给pandoc。
于是,一篇文章可以长这样:
1 | --- |
可以看到,第二段metadata只有bibliography,虽然丑陋但至少实现了功能。
需要注意的是,_config.yml中有关pandoc的部分不能指定bibliography文件。
1 | pandoc: |
graphviz的解决方案
一个简单而美好的愿望是,互联网上已经有了基于hexo的从dot语言生成SVG的插件。抱着这样的幻想,我查遍GitHub,结果发现其他懒蛋都是用JS即时渲染出SVG的。
这可不行。我想要静态生成。
于是我写了一个简单的插件,实现了SVG静态生成:hexo-renderer-viz。
安装了这个插件之后,我把所有的dot文件都放在source/notes/images/graphviz文件夹中。 source/notes/images/graphviz/a.dot最终会被渲染为source/notes/images/graphviz/a.svg。
附录:本站使用的hexo插件
1 | # 功能增强 |
Fin.