是否可以在 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]
(意思是:customa
、customb
等等)。因此,您只需替换您的undocument
bycustoma
即可。
对于encyclopaedia
,您应该使用reference
适用于百科全书、词典等的。
编辑:
您还必须将自定义字段更改agendaitem
为usera
等。有不同类型的自定义字段可用,如 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
。数据模型现在完全可定制,因此您可以完全支持任何自定义条目类型、字段和字段约束。