我正在使用出色的 biblatex 包(以 biber 作为后端)来排版我的论文的参考书目(用 pdflatex 编译)。
我想自定义 @ONLINE 类型条目的格式。默认情况下,biblatex 将以下条目格式化为(简化):
作者。标题。组织。URL。
我想要的是以下内容:当一个条目不是将作者字段设置格式应将组织字段视为作者:
组织。标题。网址。
重要的:在这种情况下,组织字段也应该用作排序字段。
如果同时设置了作者字段和组织字段,则应应用标准 biblatex 格式(见上文)。如果两者都缺失,则应发出警告。如果仅设置了作者,则应应用默认值(组织无论如何都是可选的):
作者。标题。URL。
例如我想要以下条目:
@ONLINE{Android,
title = {{A}ndroid (operating system)},
url = {http://www.android.com},
organization = {{Google, Inc.}}
}
@ONLINE{DalvikVM,
title = {{D}alvik {V}irtual {M}achine},
url = {http://code.google.com/p/dalvik},
author = {{D}an {B}ornstein et al.},
organization = {{Google, Inc.}}
}
@ONLINE{Pachube,
title = {{P}achube},
url = {http://www.pachube.com},
author = {{U}sman {H}aque}
}
格式如下:
Dan Bornstein 等人Dalvik 虚拟机. Google, Inc. 网址:http://...
Google 公司Android 操作系统.网址:http://...
乌斯曼·哈克。帕丘贝.网址:http://...
重要的:注意排序,Android 条目按其组织字段排序,其他条目按作者(姓氏)排序。
我尝试过自己自定义格式,但目前为止效果并不理想。我目前的努力:
\DeclareBibliographyDriver{online}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\iflistundef{author}
{\iflistundef{organization}
{\BibliographyWarning{No author nor organisation on Online entry}}
{\printlist{organization}}}
{\usebibmacro{author/editor+others/translator+others}}
\setunit{\labelnamepunct}\newblock
\usebibmacro{title}%
\newunit
\printlist{language}%
\newunit\newblock
\usebibmacro{byauthor}%
\newunit\newblock
\usebibmacro{byeditor+others}%
\newunit\newblock
\printfield{version}%
\newunit
\printfield{note}%
\newunit\newblock
\iflistundef{author}
{}
{\printlist{organization}}
\newunit\newblock
\usebibmacro{date}%
\newunit\newblock
\iftoggle{bbx:eprint}
{\usebibmacro{eprint}}
{}%
\newunit\newblock
\usebibmacro{url+urldate}%
\newunit\newblock
\usebibmacro{addendum+pubstate}%
\setunit{\bibpagerefpunct}\newblock
\usebibmacro{pageref}%
\usebibmacro{finentry}}
问题在于,即使有作者,组织字段现在也总是用作作者。此外,当有作者但没有组织时,只会显示标题和网址。此外,组织字段是不是用于排序,但似乎使用标题。
因此我的示例条目格式如下:
Google 公司Android 操作系统.网址:http://...
Google 公司Dalvik 虚拟机.网址:http://...
帕丘贝.网址:http://...
有人能帮助我纠正我的\DeclareBibliographyDriver
尝试以便产生我想要的格式和排序吗?
答案1
在您的驱动程序重新定义中将其替换\iflistundef{author}
为\ifnameundef{author}
,或者直接使用 Google 作为公司作者。公司作者姓名只需用括号括起来即可。请参阅下面的示例。
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@ONLINE{Android,
author = {{Google, Inc.}},
title = {Android (operating system)},
url = {http://www.android.com}}
@ONLINE{DalvikVM,
title = {Dalvik Virtual Machine},
url = {http://code.google.com/p/dalvik},
author = {Bornstein, Dan and {the Android VM team}},
organization = {{Google, Inc.}}}
@ONLINE{Pachube,
author = {Haque, Usman},
title = {Pachube},
url = {http://www.pachube.com}}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}