
biber
/ data模型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
在定義自己的約束之前。