
Модель данных 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
прежде чем определять свои собственные ограничения.