为什么指定参考文献 CSL 后,报错failed to load CSL style
?
Typst 已经内置了中文常用的 GB/T 7714—2015 格式;如果你使用了其它中文 CSL 样式,可能会遇到这些报错。
(duplicate field `layout`)
Typst 暂不支持 CSL-M 标准,可以注释掉多余的 <layout>
临时解决。
在 CSL 文件里搜索 bibliography
,这里通常有多个 <layout>
,一般建议注释掉 <layout locale="en">
这一段 <layout>
。例子如下
xml
<bibliography entry-spacing="0" et-al-min="4" et-al-use-first="3" second-field-align="flush">
<!--
<layout locale="en">
<text variable="citation-number" prefix="[" suffix="]"/>
<text macro="entry-layout"/>
</layout>
-->
<layout>
<text variable="citation-number" prefix="[" suffix="]"/>
<text macro="entry-layout"/>
</layout>
</bibliography>
(示例来自 Zotero 上的 China National Standard GB/T 7714-2015 (numeric, 中文),原作者见此文件,依 CC-BY-SA 3.0 协议使用)
这样修改之后,CSL 根据文献语言自动使用“等”或“et al.”的功能会失效,请见如何修复英文参考文献中的“等”。
(unknown variant `institution`, expected one of `name`, `et-al`, `label`, `substitute`)
在 CSL 文件里注释掉不支持的部分。
(data did not match any variant of untagged enum Term)
该错误有多种可能原因。若 CSL 文件中包含citation-range-delimiter
,请删除相应<term>
,例如:
diff
<locale>
<terms>
- <term name="citation-range-delimiter">-</term>
<term name="page-range-delimiter">-</term>
</terms>
</locale>
原因
按照 GB/T 7714—2015,同一处连续引用多篇文献时,起讫序号间用短横线连接,例如[255-256]
。这个短横线默认是–
(U+2013 EN DASH),以上citation-range-delimiter
将它修改为-
(U+002D HYPHEN-MINUS)。不过citation-range-delimiter
超出了 CSL 规范和 CSL-M 扩展,是 citeproc-js 单独实现的,Typst 并不识别。
若并无citation-range-delimiter
,或者删除后仍然报错,恐怕是 CSL 文件有误,可尝试二分法依次删除各个<macro>
来定位问题。