biblatex 中的强制约束类型有什么作用?

biblatex 中的强制约束类型有什么作用?

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}

如果我运行pdflatexbiberpdflatex,我预计它biber会停止,或者至少会大声抱怨,表示约束未得到满足,但我在logblg文件中均未看到任何表明约束未得到满足的内容。是否可以定义约束,使得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

在定义您自己的约束之前。

相关内容