要自定义biblatex中的参考文献条目,需要使用biblatex的数据模型(Data Model)功能。下面是一个示例,它将存储在.bib文件中的参考文献条目的作者的姓名转换为缩写形式,并将其保存到一个新的领域中。
首先,在.preamble命令中,定义一个新的姓名格式,并声明缩写形式。
\DeclareNameFormat{last-first}{%
\renewcommand{\mkbibnamefirst}[1]{\ifblank{##1}{}{##1\space}}%
\ifdefstring{\namepartfamily}{McGill}{%
{\MakeUppercase{McG}}%
}{%
\ifdefstring{\namepartfamily}{Jones}{%
{\MakeUppercase{Jon}}%
}{%
\ifdefstring{\namepartfamily}{Doe}{%
{\MakeUppercase{Doe}}%
}{%
{\MakeUppercase{\namepartfamily}}%
}%
}%
}%
\ifblank{\namepartgiven}{}{\mkbibnamegiven{##1}\isdot}%
\ifblank{\namepartprefix}{}{\addcomma\space\mkbibnameprefix{##4}\isdot}%
\ifblank{\namepartsuffix}{}{\addcomma\space\mkbibnamesuffix{##5}\isdot}%
}
然后,需要声明一个新的数据模型,它将使用刚刚定义的名称格式并添加新的领域以存储缩写形式的作者名称。
\DeclareDatamodelFields[type=list,datatype=name]{abbrevauthor}
\DeclareDatamodelEntryfields{abbrevauthor}
\DeclareDatamodelEntryfields[inbook,incollection,inproceedings,patent,thesis,unpublished]{abbrevauthor}
接下来,定义用于填充新领域的Biber映射规则。
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite=true]{
\step[fieldsource=author,
match=\regexp{\b(McGill|Jones|Doe)\b},
fieldset=abbrevauthor,
fieldvalue={$1},
append=true]
}
}
}
最后,需要修改样式以使用新的名称格式并显示新的领域。
\DeclareFieldFormat{labelname}{\usebibmacro{abbvname}{#1}}
\newbibmacro*