Citum:CSL 老了,引文排版该换引擎了
> Rust 开源 | citum.org > > CSL 1.0 是 2006 年的设计。二十年后,学术文献的数据模型、出版流程、AI 写作工具全变了。Citum 不是修修补补,是重新造轮子。
---
📜 问题:CSL 快二十岁了
Citation Style Language(CSL)2006 年发布,2010 年定稿 1.0。它定义了:
- XML 格式的样式文件(
.csl) - JSON 格式的参考文献数据(CSL-JSON)
- 一套基于 XSLT 的渲染逻辑
| 硬伤 | 症状 |
|---|---|
| XML 样式难写难读 | 六百行的 XML 定义 APA 格式,改一个标点要翻三层嵌套 |
| 数据模型偏窄 | 日期只支持简单格式,双语呈现靠 hack,复杂关系(如预印本→正式出版)表达不了 |
| 类型系统缺失 | 样式加载时不验证,错了就默默渲染错,用户事后才发现 |
| 输出格式单一 | 主要是 HTML 和纯文本,LaTeX、Typst、Djot 的支持靠外围工具拼接 |
---
🏗️ 架构:一条 Pipeline 管到底
References (JSON / YAML / BibLaTeX / RIS)
│
▼
citum-schema ←── Style (YAML) ←── Locale (YAML)
│
▼
citum-engine
│
▼
HTML / plain text / LaTeX / Typst / Djot / …
核心组件
| 组件 | 职责 |
|---|---|
| citum-schema | 参考文献数据模型 + 样式 schema。类型安全,加载时全量验证 |
| citum-engine | 渲染引擎。Rust 实现,零拷贝解析,WASM 可编译 |
| citum (CLI) | 命令行工具:render、check、convert、validate |
| citum-server | JSON-RPC 服务,无状态 HTTP,适合 sidecar 或托管部署 |
| citum-bindings | WASM / C FFI / JS-TS 绑定 |
🎯 五大升级
1. 数据模型:从「够用」到「丰富」
CSL 的日期字段就几种格式。Citum 原生支持:
- EDTF(Extended Date/Time Format)—— 模糊日期、区间日期、近似日期全收录
- 双语文献 —— 原生字段支持原文/译名并行,不用靠
original-前缀 hack - 复杂关系 —— 预印本、正式出版、修订版之间的指向关系显式建模
2. 样式语言:XML → YAML
# APA 7th 的 Citum 样式片段
style:
name: apa-7th
version: "7"
citation:
layout:
- author:
form: family-given
delimiter: ", "
- date:
form: year
- title:
form: sentence-case
bibliography:
layout:
- author
- date
- title
- container-title:
font-style: italic
- volume-issue-pages
- Diff-friendly —— Git 协作时看得清改了什么
- Human-readable —— 不用背 XML 命名空间
- Toolable —— YAML 解析器遍地都是,AI 也能读
3. 类型安全:错了就报错,不静默出错
样式加载时,citum-schema 做全量验证:
- 字段类型不匹配 → 拒绝加载
- 引用了未定义的 locale → 拒绝加载
- 样式结构不完整 → 拒绝加载
4. Oracle 验证:跟 CSL / biblatex ecosystem 对齐
Citum 的渲染输出不是「我觉得对」,是「跟 citeproc-js 和 biblatex 对过账」。
- 兼容性看板自动跑测试:citum.github.io/citum-core/compat.html
- 回归自动捕获——改了引擎逻辑后,看哪些样式输出偏离了基准
5. 部署:同一份代码,五张脸
| 接口 | 场景 |
|---|---|
| CLI | 本地文档构建、CI/CD 流水线 |
| WASM | 浏览器端实时渲染、Node.js 集成 |
| JSON-RPC | 编辑器插件(VS Code、Vim)、静态站点生成器 sidecar |
| C FFI | Python、Lua、R 等语言的绑定 |
| Rust crate | 直接嵌入 Rust 应用 |
🤖 AI 辅助:自然语言写样式
Citum 配套了 AI 工具,帮用户用自然语言创建和校验 YAML 样式。
示例对话: > "我要一个 GB/T 7714 的中文样式,作者姓在前名缩写在后,三个以上作者只列前三个加等字,期刊名用正书名号包裹。"
AI 生成对应的 Citum YAML,再跑 check 验证合法性。
这对非技术背景的编辑、图书馆员、研究生是大幅降低门槛。
---
🔄 迁移:CSL XML 不是遗产,是负债
Citum 提供了 citum-migrate:
citum migrate csl-1.0 apa.csl --output apa-7th.yaml
自动把 CSL XML 转成 Citum YAML。但迁移不只是格式转换:
- CSL 的 hack 式扩展(如自定义宏)需要人工审查
- 数据模型差异(如 EDTF 日期)可能需要补全参考文献数据
⚠️ 现状:还在早期
| 模块 | 状态 |
|---|---|
| Schema、Engine、CLI | 稳定核心 |
| PDF 输出 | 实验性 |
| 部分语言绑定 | 实验性 |
| 样式库 | 在扩展中,目前覆盖主流学术格式 |
🎯 核心结论
1. CSL 1.0 是 2006 年的设计,数据模型、样式语法、部署方式都已跟不上当代出版和 AI 工作流。 2. Citum 不是兼容层,是替代方案。YAML 样式、类型安全、EDTF 日期、双语支持,全是原生设计。 3. 部署灵活性是关键。同一引擎跑在 CLI、浏览器、编辑器、服务器,这是 Rust + WASM 的天然优势。 4. AI 辅助降低门槛。自然语言生成 YAML 样式,让非程序员也能维护引文格式。 5. Oracle 验证保证正确性。不是「我觉得对」,是「跟 citeproc-js 和 biblatex 对过账」。
---
参考文献
- Citum Core GitHub: https://github.com/citum/citum-core
- 文档: https://docs.citum.org
- 官网: https://citum.org
- CSL 1.0 规范: https://docs.citationstyles.org/
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens