Biblatex 和自定义 bibtex 条目 - 可能吗?

Biblatex 和自定义 bibtex 条目 - 可能吗?

是否可以在 bib 文件中创建具有自定义 @entry 类型的条目?例如,下面是我为法律百科全书和联合国文件创建的条目。

@undocument{modeleclaw,
        作者 = {联合国国际贸易法委员会 (UNCITRAL)},
        添加日期 = {2011-04-11 15:27:46 +0800},
        修改日期 = {2011-04-11 15:44:53 +0800},
        短标题 = {示范法},
        标题 = {联合国国际贸易法委员会电子商务示范法颁布指南},
        年份 = {1996}}
@encyclopaedia{哈尔斯伯里,
        章节编号 = {7},
        Chaptertitle = {合同:一般原则},
        日期 = {2006 年 8 月 31 日},
        添加日期 = {2011-04-11 11:22:57 +0800},
        修改日期 = {2011-04-11 11:25:06 +0800},
        百科全书标题 = {澳大利亚哈斯伯里法},
        出版商 = {LexisNexis},
        标题 = {要约由特定元素组成},
        标题编号 = {7.1.460},
        体积 = {TLA [7.1.460]},
}

我看过 biblatex 手册,但找不到任何说我可以定义自己的类型的内容。可能吗?那么,如果可以,我该如何在 bbx 和 cbx 文件中定义驱动程序来管理类型?我尝试创建这个作为示例,但我不确定我是否走在正确的轨道上:

% 联合国文件(非文件)
\DeclareBibliographyDriver{未文档}{%
  \usebibmacro{bibindex}%
  \usebibmacro{标题}%
  \setunit{\添加逗号\空格}%
  \iffieldundef{分辨率编号}{}{\thefield{分辨率编号}\setunit{\addcomma\space}}%
  \iffieldundef{officialrecords}{}{\thefield{officialrecords}\setunit{\addcomma\space}}%
  \iffieldundef{committeenumber}{}{\thefield{committeenumber}\setunit{\addcomma\space}}%
  \iffieldundef{sessionnumber}{}{\thefield{sessionnumber}\setunit{\addcomma\space}}%
  \iffieldundef{会议编号}{}{\thefield{会议编号}\setunit{\addcomma\space}}%
  \iffieldundef{agendaitem}{}{议程项目 \thefield{agendaitem}\setunit{\addcomma\space}}%
  \iffieldundef{supplement}{}{补充编号 \thefield{supplement}\setunit{\addcomma\space}}%
  \iffieldundef{undocnumber}{}{联合国文件\thefield{undocnumber}\setunit{\addcomma\space}}%
  \iffieldundef{日期}{}{\mkbibparens\thefield{日期}\setunit{\addcomma\space}}%
  \iffieldundef{annex}{}{\thefield{annex}\setunit{\addcomma\space}}%
  {\printlist{发布者}\setunit{\addcomma\addspace}}%
}


% ENCYCLOPAEDIA(百科全书)
\DeclareBibliographyDriver{百科全书}{%
  \usebibmacro{bibindex}%
  {\printlist{发布者}\setunit{\addcomma\addspace}}%
  \usebibmacro{百科全书标题}
}

当我编译我的 tex 文件时,我得到了这个:

软件包 biblatex 警告:没有针对条目类型“misc”的驱动程序。
(biblatex)跳过输入行 146 上的条目“modeleclaw”。

我不确定我是否以正确的方式处理此事。

答案1

一个技巧:修改.bst文件以便它能识别新的条目类型是非常容易的:只需将以下行附加到.bst文件中,例如使 @undocument 成为 @misc 的同义词:

FUNCTION { undocument } { misc }

这仅意味着 Bibtex 调用来生成 @undocument 的 .bbl 条目的函数仅调用它用来生成 @misc 条目的函数。

Biblatex 的做法略有不同,因为它传递类型信息如下:

FUNCTION {article} { type$ output:entry }

其中output:entry,通用函数用于将有关记录的所有信息转储到 .bbl 以供 Biblatex 使用(如果您没有传递类型信息,按照第一行,Biblatex 会认为,例如,@undocument 是 @misc 条目)。

然后,您可以将站点定义克隆biblatex.bst你的本地 texmf 树(针对 Texlive),并添加一些行,例如:

FUNCTION { undocument } { type$ output:entry }

到您的个人版本的 biblatex.bst。然后 Bibtex 会像对待其他类型一样对待这些类型,您可以在 bbx/cbx 样式中使用它们。

后记

正如 domwass 所指出的,如果您以这种方式更改版本biblatex.bst,您必须意识到,如果您使用基于旧版本的本地分支,升级可能会破坏 Biblatex。虽然大多数修订版不会引入不兼容的更改(我认为从 0.9e 到 1.3 没有任何会导致问题的更改),但最后一个修订版 1.4 对文件中表示信息的biblatex.bst方式进行了非常大的更改,这肯定需要创建一个新的修补文件。biblatex.bst.bib

答案2

目前,无法创建自己的文档类型。这是 BibTeX(程序)的限制,因为 biblatex 必须在bst。将来,这可能成为可能,只要 biblatex 放弃对 BibTeX 程序的支持,并且只与 biber 配合使用(这是 biblatex 2.0 版的目标)。但定义自己的文档类型可能不会早于版本 3(至少这是我对路线图)。不过,与此同时,您可以使用条目类型custom[a–f](意思是:customacustomb等等)。因此,您只需替换您的undocumentbycustoma即可。

对于encyclopaedia,您应该使用reference适用于百科全书、词典等的。

编辑:

您还必须将自定义字段更改agendaitemusera等。有不同类型的自定义字段可用,如 biblatex 手册中的以下引文所示:

  • name[a–c]列表名称)

特殊书目样式的自定义列表。[…]

  • name[a–c]type字段(键)

与 authortype 和 editortype 类似,但指的是字段name[a-c]。[…]

  • list[a–f]列表(文字)

特殊书目样式的自定义列表。[…]

  • user[a–f]字段(文字)

特殊书目样式的自定义字段。[…]

  • verb[a–c]字段(文字)

与上面的自定义字段类似,只是这些是逐字字段。[…]

(我总是省略上面引用中的一句话,即“标准书目样式未使用”。)

您可以在 biblatex 手册第 2.2.1 节“数据类型”中阅读有关不同类型字段的更多信息。

答案3

biblatex这个问题是前一段时间提出的,但为了完整性,现在使用和作为后端已经可以实现一段时间了biber。数据模型现在完全可定制,因此您可以完全支持任何自定义条目类型、字段和字段约束。

相关内容