除了第 2.1 章中 biblatex 列出的标准必填字段外,我还想定义自己的必填字段。例如,对于 biblatex 仅要求的书籍,我author, title, year/date
还希望publisher
将location
其作为必填字段,并在不存在时发出警告。
是否可以根据 biblatex 或 biber 来做到这一点,这取决于 bib 类型(例如书籍、文章等的不同必填字段)?
答案1
根据@moewe 的建议,我发布了我所做的工作来创建自定义模型规范,它添加了我的参考书目所需的一些简单规则。
我已经custom.dbx
在我的用户texmf
文件夹中创建了一个自定义文件,如 biblatex 文档第 4.5.3 节中所述。不要忘记FNDB
使用 MikTex 设置菜单刷新 eg。要加载此文件,一种方法是添加datamodel=custom
到 biblatex 的包选项中。其他方法在文档中描述。还可以将其添加--validate_datamodel "%tm"
为 biber 的参数。在数据模型文件中,我为一些条目类型添加了更多约束。这些约束将附加到已经存在的约束中。
对于书籍和收藏,除了已经强制要求的之外,我还希望publisher
和是强制要求的。此外,如果给出了一个字段,则必须提供一个字段。location
author, title, year/date
series
number
\DeclareDatamodelConstraints[book,collection]{
\constraint[type=mandatory]{
\constraintfield{publisher}
\constraintfield{location}
\constraint[type=conditional]{
\antecedent[quantifier=all]{
\constraintfield{series}
}
\consequent[quantifier=all]{
\constraintfield{number}
}
}
}
}
对于合集和论文集页面应该给出,因此我添加了:
\DeclareDatamodelConstraints[incollection,inproceedings]{
\constraint[type=mandatory]{
\constraintfield{pages}
}
}
在标准配置中eprint
,没有为 entrytype 指定eprintclass
和。为了改变这一点,我添加了:eprinttype
online
\DeclareDatamodelEntryfields[online]{
eprint,
eprintclass,
eprinttype,
archiveprefix
}
最后我希望所有条目类型都包含该langid
字段,并且当publisher
给出该字段时,该location
字段也必须存在:
\DeclareDatamodelConstraints[
article,
book,
inbook,
bookinbook,
suppbook,
booklet,
collection,
incollection,
suppcollection,
manual,
misc,
mvbook,
mvcollection,
online,
patent,
periodical,
suppperiodical,
proceedings,
inproceedings,
reference,
inreference,
report,
set,
thesis,
unpublished]{
\constraint[type=mandatory]{
\constraintfield{langid}
}
\constraint[type=conditional]{
\antecedent[quantifier=all]{
\constraintfield{publisher}
}
\consequent[quantifier=all]{
\constraintfield{location}
}
}
}