如何配置一个学术写作博客(二)

有关我的博客的初步的探索中已经列出一系列好用的hexo主题和插件,但仍留有三个问题没有解决:TOC中的参考文献无法取消自动编号;bib文件需要手动生成;graphvizdot文件也必须手动生成。其中第一个问题因我为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发现,hexorenderer接口并不会把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:
# pandoc 的交叉引用插件
- filter: pandoc-crossref

# 换了个参考文献格式
# - csl: "GB7714.csl"
- csl: "elsevier-with-titles.csl"

# 注释掉,很重要。
# - bibliography: bibfile.bib

# 留空就好
- 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 # RSS
- hexo-generator-tag # 标签
# 部署
- hexo-deployer-git
- hexo-deployer-sftp
# 学术插件
- hexo-filter-mathjax # LaTeX 公式
- hexo-renderer-pandoc # pandoc 是搞学术的精髓
- hexo-renderer-viz # graphviz 绘图
# 体验优化
- hexo-filter-fix-cjk-spacing # 删除 CJK 字符间的多余空格
- hexo-filter-text-autospace # 在 CJK 字符和拉丁字符间添加间距(并不是空格)

Fin.

0条搜索结果。