biber
/数据模型biblatex
允许用户使用 指定数据模型上的约束\DeclareDatamodelConstraints
。在 定义的默认数据模型中,blx-dm.def
有:
\DeclareDatamodelConstraints[article]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{journaltitle}
\constraintfield{title}
}
}
据我所知,该约束不起作用。考虑以下 MWE:
\documentclass{article}
\usepackage{biblatex}
\begin{filecontents*}{\jobname.bib}
@article{myarticle,
title = {Some Title}
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\cite{myarticle}
\printbibliography
\end{document}
如果我运行pdflatex
、biber
、pdflatex
,我预计它biber
会停止,或者至少会大声抱怨,表示约束未得到满足,但我在log
或blg
文件中均未看到任何表明约束未得到满足的内容。是否可以定义约束,使得biber
/pdflatex
会在约束未得到满足时发出抱怨?
答案1
要检查这些约束,您需要将--validate_datamodel
选项传递给biber
。在您的示例中运行
biber --validate_datamodel file
我明白了
[...] WARN - Datamodel: Entry 'myarticle' (file.bib): Missing mandatory field - one of 'date, year' must be defined WARN - Datamodel: Entry 'myarticle' (file.bib): Missing mandatory field 'author' WARN - Datamodel: Entry 'myarticle' (file.bib): Missing mandatory field 'journaltitle' [...] INFO - WARNINGS: 3
如果你愿意,你可以在一个biber.conf
文件中设置此选项,该文件包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<validate_datamodel>1</validate_datamodel>
</config>
biber
而不是每次都写入命令行选项。
答案2
如果你改变现有字段的约束,不要忘记调用
\ResetDatamodelConstraints
在定义您自己的约束之前。