有关我的博客的初步的探索中已经列出一系列好用的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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| --- title: "Serial Experiments Lain: 一系列模糊了虚拟和现实的实验(上)" tags: - 二次元 categories: - 浅思 date: 2022-04-05 10:47:14 ---
--- bibliography: source/_bibs/Serial Experiments Lain.bib ---
... blah blah ...
> In the 1980s, the synthesizer became a common, viable tool for musicians. [@klemens201221st]
... blah blah ...
Fin.
|
可以看到,第二段metadata只有bibliography,虽然丑陋但至少实现了功能。
需要注意的是,_config.yml
中有关pandoc的部分不能指定bibliography文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| pandoc: extra: - filter: pandoc-crossref
- csl: "elsevier-with-titles.csl"
- citeproc:
|
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| - hexo-html-minifier - hexo-pagination - hexo-generator-archive - hexo-generator-baidu-sitemap - hexo-generator-category - hexo-generator-feed - hexo-generator-tag
- hexo-deployer-git - hexo-deployer-sftp
- hexo-filter-mathjax - hexo-renderer-pandoc - hexo-renderer-viz
- hexo-filter-fix-cjk-spacing - hexo-filter-text-autospace
|
Fin.