使用 biblatex+biber 自定义“在线”条目格式:当缺少作者时,使用组织代替作者

使用 biblatex+biber 自定义“在线”条目格式:当缺少作者时,使用组织代替作者

我正在使用出色的 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}
}

格式如下:

  1. Dan Bornstein 等人Dalvik 虚拟机. Google, Inc. 网址:http://...

  2. Google 公司Android 操作系统.网址:http://...

  3. 乌斯曼·哈克。帕丘贝.网址: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}}

问题在于,即使有作者,组织字段现在也总是用作作者。此外,当有作者但没有组织时,只会显示标题和网址。此外,组织字段是不是用于排序,但似乎使用标题。

因此我的示例条目格式如下:

  1. Google 公司Android 操作系统.网址:http://...

  2. Google 公司Dalvik 虚拟机.网址:http://...

  3. 帕丘贝.网址: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}

相关内容