使用 biber 定义 biblatex 中所需的 bib 字段

使用 biber 定义 biblatex 中所需的 bib 字段

除了第 2.1 章中 biblatex 列出的标准必填字段外,我还想定义自己的必填字段。例如,对于 biblatex 仅要求的书籍,我author, title, year/date还希望publisherlocation其作为必填字段,并在不存在时发出警告。

是否可以根据 biblatex 或 biber 来做到这一点,这取决于 bib 类型(例如书籍、文章等的不同必填字段)?

答案1

根据@moewe 的建议,我发布了我所做的工作来创建自定义模型规范,它添加了我的参考书目所需的一些简单规则。

我已经custom.dbx在我的用户texmf文件夹中创建了一个自定义文件,如 biblatex 文档第 4.5.3 节中所述。不要忘记FNDB使用 MikTex 设置菜单刷新 eg。要加载此文件,一种方法是添加datamodel=custom到 biblatex 的包选项中。其他方法在文档中描述。还可以将其添加--validate_datamodel "%tm"为 biber 的参数。在数据模型文件中,我为一些条目类型添加了更多约束。这些约束将附加到已经存在的约束中。

对于书籍和收藏,除了已经强制要求的之外,我还希望publisher和是强制要求的。此外,如果给出了一个字段,则必须提供一个字段。locationauthor, title, year/dateseriesnumber

\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和。为了改变这一点,我添加了:eprinttypeonline

\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}
        }
    }
  }

相关内容