rheo 是一款野心勃勃的软件:著者试图把 typst 的 pdf/epub/html 导出全部整合到 rheo 这一个软件中,也就是说,写一份 .typ 代码,rheo 会自动帮你编译这三种文档格式,此外还有一些其他(我暂时没用到的)小功能。
那么,为什么用 rheo 呢?因为我老是对之前用的 Tufted 模板感到有些美中不足:
svg 显示数学公式(typst 0.14.0 甚至不支持导出数学公式到 html)。不过,在 typst 0.15.0 发布了对 mathml 的支持后,我在本项目 github 仓库提出了 issue,作者也很快加入了 mathml 支持;css 对移动端支持不好;而 rheo 不依赖于 github action、不止是一个博客生成器,甚至连较为小众的 epub 也有支持1,此则深得我心。
rheo 到目前为止(0.5.0)的基本功能十分简单,这个网站本身就是根据
1994 年,雅虎创造了一个名为 geocities(地球村)的网站,并提供免费的博客托管服务,此网站一时成为最火热的社交平台之一:对互联网充满好奇的大家都纷纷创建自己的网页,并发布一些在今天看来十分童稚的手写 html 文件。这种其乐融融的氛围终于在某一个时刻消失了:雅虎发现地球村并不能创造收入,并关停了网站。
Neocities 致力于复兴这种互联网早期的博客平台,这点深合我意:我是互联网的一代,互联网的历史是我眼中历史的一部分。虽然在互联网军阀诸如谷歌、脸书、腾讯等等平台的围剿下,传统互联网已经不可逆转地消逝了,然而,我认同钱穆先生的历史观:我们对过去应该带有一种温情与敬意。
我和 Neocities 的第一次相遇或许是在 2023 年的某个夏夜,那时候我第一次看《玲音》,高中三年的荒诞生活让我对这种弱剧情、强环境的东西感到亲切,我当时在互联网上努力寻找关于《玲音》的资料,其中给我留下最深印象的,当属托管于 Neocities 的 Wired Sound for Wired Peiple:套用李安的话,我看不懂,但大受震撼。
那我究竟为什么用 Neocities 而不用更流行的 github pages 呢?因为我真是他妈的受够 github 的一切了!经常连不上不说(这是能说的吗),这几天还把我 github action 封了,在网上找了很久,发现通行的解决方案竟然是重新注册一个新的……也许是时候换一个平台了。
主要工具就两个:上文提及的 rheo,以及 neocities-deploy(两者都是 Rust 软件),下载好后,就可以执行 rheo init <仓库名> 生成模型仓库了,原始结构如下:
.
├── content
│ ├── about.typ
│ ├── img
│ │ └── header.svg
│ ├── index.typ
│ └── references.bib
├── index.js
├── rheo.toml
└── style.css其中
content/ 是我们写 typst 的地方;index.js 是编译出来的 html 中引用的脚本,如果不需要 js(譬如本博客),则可直接删除;rheo.toml 是 rheo 自己的配置文件;style.css 就是 html 需要的样式表。写完博文后执行 rheo compile . --html 就会在项目目录中生成 build/html 文件夹,那里存放着我们网页需要的 html 文件。此时已经可以上传到 Neocities 了,为此,我们需要一个方便的工具:neocities-deploy。
下载完成后,先按 neocities-deploy 文档设定配置文件,在 linux 上就是 XDG_CONFIG_DIRS/neocities-deploy/config.toml,首次使用可直接执行 neocities-deploy config 进行交互式配置,生成的样式如次:
[site.qinyx]
auth = <你的密钥>
free_account = true # 是否为免费用户
path = <本地目录> # 在我们的例子中,就是 build/html 的绝对路径设定好配置文件后,就可以执行 neocities-deploy deploy 把文档部署到 Neocities 服务器了!
如果需要保存版本记录(这完全是附加功能,如果只想部署网页,则毋需阅读以下),也就是说,将源码提交到某个 git 仓库,则我们的工作流会较为繁琐:首先要让 rheo 编译 typst 文档,其次要执行 neocities-deploy 部署到 Neocities,最后还要用 git 提交源码……
然而,这所有功能都可以集成到一个命令 just 里,这个命令在我看来有点像传统的 make(就是自动按先后顺序乃至条件判断,执行一系列“构建”命令),但是语法更适合人类阅读。总之,我的 .justfile 如下:
alias b := build
build:
rheo compile . --html
neocities-deploy deploy
git add .
git commit
git push终于能愉快地写博客了!😆😆😆😆😆😆😆😆😆😆😆😆😆😆😆😆😆😆😆😆😆😆😆😆😆😆
epub 在互联网时代的地位会越来越高,因为它的确解决了 pdf 的很多痛点(pdf 的字体大小是固定的,在手机等小屏幕上读 pdf 文档的体验不好),关于 epub 的性质以及配套设施,可以参考 Portable epubs 一文。