biblatex 中的強制約束類型有什麼作用?

biblatex 中的強制約束類型有什麼作用?

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我希望停止,或至少大聲抱怨不滿足約束,但我在或文件中沒有看到任何表明不滿足約束的內容。是否可以定義約束,使得/如果不滿足就會抱怨?biberpdflatexbiberlogblgbiberpdflatex

答案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

在定義自己的約束之前。

相關內容