如何修复英文参考文献中的“等”?
著录多著者文献时可能省略部分作者,这时著录中文应加“等”,著录英文则应加“et al.”。然而目前 Typst 只支持用#set text(lang: …)统一选择“等”("zh")或“et al.”("en"),不支持逐文献设置。
若需按文献语言自动选择“等”或“et al.”,主要有以下两类办法:
替换字符——简单快速,推荐使用
替换参考文献引擎——根治问题,但有其它缺点,具体有 citext、gb7714-bilingual 等选择
本页会依次介绍这些方法;此外也可考虑手动录入参考文献。
法一:替换字符
导入 modern-nju-thesis 的 bilingual-bibliography 函数,将英文参考文献中的等、译等汉字替换为英文。
// 在文档开头引入
#import "@preview/modern-nju-thesis:0.4.0": bilingual-bibliography
// 将原本的 #bibliography("refs.bib") 替换为
#bilingual-bibliography(bibliography: bibliography.with("refs.bib"))- 优点
- 简单快速,能覆盖大部分场景
- 不会增加格式问题
- 性能不受影响,与 Typst 内置方式无明显差异
- 缺点
- 可能存在误判,毕竟本质上是几十行查找替换(例:译者只有一个且名字包含逗号时,“tran(s)”单复数无法正确处理)
完整测试例子
#import "@preview/modern-nju-thesis:0.4.0": bilingual-bibliography
- 中文@吴伟仁2017
- 英文@su2025
#let bib = ```bib
@article{吴伟仁2017,
title = {软着陆任务设计},
author = {{吴伟仁} and {王琼} and {唐玉华} and {于国斌} and {刘继忠} and {张玮} and {宁远明} and {卢亮亮}},
}
@article{su2025,
title = {South {{Pole}}–{{Aitken}}},
author = {Su, Bin and Chen, Yi and Wang, Zeling and Zhang, Di and Chen, Haojie and Gou, Sheng and Yue, Zongyu and Liu, Yanhong and Yuan, Jiangyan and Tang, Guoqiang and Guo, Shun and Li, Qiuli and Lin, Yang-Ting and Li, Xian-Hua and Wu, Fu-Yuan},
}
```.text
#bilingual-bibliography(bibliography: bibliography.with(bytes(bib)))
替换参考文献引擎
法一基于 Typst 内置的参考文献引擎,另一类方法是替换参考文献引擎,具体有 citext、gb7714-bilingual 等选择。这类方法有如下共同特点。
- 共同优点
- 真正按文献语言自动切换渲染方式
- 共同缺点
- 同一处引用多篇文献时,(因
show cite规则限制)不能单纯@key-a @key-b,必须调用专门的mulcite或multicite函数 - 对文字之外的格式支持不好(例:长URL折行时,链接可能异常[1])
- 不支持导出为 HTML(因为使用了
grid、hide等语义弱的函数)
- 同一处引用多篇文献时,(因
法二:换用 citext
使用 citext 替换 Typst 内置的参考文献引擎。
安装 citext
citext 未发布至 Typst Universe,需手动安装。具体有两种选择:
第一种方法相对简单,而且支持 typst.app 在线应用,可优先尝试。
在文档开头引入
typst#import "./local-package/citext/lib.typ": * // 若安装为 local package,请将上一行替换为: // #import "@local/citext:0.4.0": * #let bib = init-citation(read("refs.bib")) #show: show-extcite.with(bib: bib, gen-id: true)在
#bibliography("refs.bib")前后添加typst#show bibliography: none #bibliography("refs.bib") // 与其它方法不同,法二需保留这行 = 参考文献 #extbib(bib)
优点
真正按文献语言自动切换渲染方式
同时能解决其它文字格式问题
因为 citext 使用了 Zotero 中文社区维护的 CSL 样式和相关成熟技术栈
缺点
性能很差
由于替换了引擎,会显著降低从零编译文档的速度(从一秒慢到十几秒),请在编写过程中妥善利用 Typst 的增量编译能力(
typst watch/tinymist preview)。替换参考文献引擎的若干共同缺点
更多细节请阅读 citext 的 README。
citext 的技术栈
Typst 的参考文献样式采用 CSL 标准,但 CSL 无法描述如何按文献语言切换渲染方式。CSL-M 扩展增加了这一功能,但 Typst 所用参考文献引擎尚不支持。
citext 使用 citation.js + QuickJS + WebAssembly + CtxJS 替代了 Typst 原生的参考文献功能,从而可以通过 citation.js 调用 citeproc-js 来支持 CSL-M。
完整测试例子
#import "@local/citext:0.4.0": extbib, init-citation, show-extcite
#let bib-content = ```bib
@article{吴伟仁2017,
title = {软着陆任务设计},
author = {{吴伟仁} and {王琼} and {唐玉华} and {于国斌} and {刘继忠} and {张玮} and {宁远明} and {卢亮亮}},
language = {zh},
}
@article{su2025,
title = {South {{Pole}}–{{Aitken}}},
author = {Su, Bin and Chen, Yi and Wang, Zeling and Zhang, Di and Chen, Haojie and Gou, Sheng and Yue, Zongyu and Liu, Yanhong and Yuan, Jiangyan and Tang, Guoqiang and Guo, Shun and Li, Qiuli and Lin, Yang-Ting and Li, Xian-Hua and Wu, Fu-Yuan},
language = {en},
}
```.text
#let bib = init-citation(bib-content)
#show: show-extcite.with(bib: bib, gen-id: true)
- 中文@吴伟仁2017
- 英文@su2025
#show bibliography: none
#bibliography(bytes(bib-content))
= 参考文献
#extbib(bib)
法三:换用 gb7714-bilingual
使用 gb7714-bilingual 替换 Typst 内置的参考文献引擎。
// 在文档开头引入
#import "@preview/gb7714-bilingual:0.2.1": init-gb7714, gb7714-bibliography
#show: init-gb7714.with(read("refs.bib"), style: "numeric", version: "2015")
// 将原本的 #bibliography("refs.bib") 替换为
#gb7714-bibliography()优点
- 真正按文献语言自动切换渲染方式
- 性能较好,仅略微慢于 Typst 内置方式,实用基本无感
缺点
- 可能增加其它文字格式问题,因为该引擎是2026年1月新开发的,尚不稳定
- 替换参考文献引擎的若干共同缺点
更多细节请阅读 gb7714-bilingual – Typst Universe。
另外还可使用同作者开发的 citrus(又名 citeproc-typst),原理相同,支持一般 CSL,但因为代码逻辑更复杂而性能相对低下。
完整测试例子
#import "@preview/gb7714-bilingual:0.2.1": gb7714-bibliography, init-gb7714
#let bib = ```bib
@article{吴伟仁2017,
title = {软着陆任务设计},
author = {{吴伟仁} and {王琼} and {唐玉华} and {于国斌} and {刘继忠} and {张玮} and {宁远明} and {卢亮亮}},
}
@article{su2025,
title = {South {{Pole}}–{{Aitken}}},
author = {Su, Bin and Chen, Yi and Wang, Zeling and Zhang, Di and Chen, Haojie and Gou, Sheng and Yue, Zongyu and Liu, Yanhong and Yuan, Jiangyan and Tang, Guoqiang and Guo, Shun and Li, Qiuli and Lin, Yang-Ting and Li, Xian-Hua and Wu, Fu-Yuan},
}
```.text
#show: init-gb7714.with(bib, style: "numeric", version: "2015")
- 中文@吴伟仁2017
- 英文@su2025
#gb7714-bibliography()
另请参见
- 差距分析:英文用“et al.”,中文用“等”(级别:Broken)
- Please support CSL-M · citationberg#5 (open issue)
- chinese et al. · hayagriva#291 (open issue)
- Typst ignores `language` or `langid` parameters for both .bib and .yaml files · typst#3168 (open issue)
- Feature request: 支持中英双语的参考文献 · nju-lug/modern-nju-thesis#3 (open issue)
- `bilingual-bibliography` 双语参考文献(测试) · csimide/SEU-Typst-Template#1 (open issue)
- Improve Language Handling · biblatex#78 (merged pull request)
- Multilingual bibliography · hayagriva#126 (rejected pull request)
- 相关解决方案:universe/modern-nju-thesis
- 相关解决方案:citext (github)
- 相关解决方案:universe/gb7714-bilingual