Biblatex:当设置 pubstate=forthcoming 时,如何获取“作者(即将出版)”,而不是“作者(nd)”?

Biblatex:当设置 pubstate=forthcoming 时,如何获取“作者(即将出版)”,而不是“作者(nd)”?

我正在使用 biblatex 及其以下选项:

\usepackage[backend=biber,natbib=true,style=authoryear,language=english]{biblatex}

我有一个条目,其字段 pubstate 设置为“即将推出”。

当我在文中引用该参考文献时,得到的是“作者(nd)”,而我希望得到的是“作者(即将出版)”。

参考书目中的内容几乎相同。我得到的是:作者(nd)... blablabla ... 即将出版。我更喜欢:作者(即将出版):blablabla ...

我可以将“年份”字段设置为“即将出版”。但是,这不是一个好的解决方案,因为我经常用三种语言写文章。而且每次我用另一种语言开始写新文章时,我都需要更改我的参考书目数据库。

关于如何解决这个问题我有什么想法吗?

非常感谢,Pierric

答案1

通常的做法是使用 来扩展日期字段列表\DeclareLabeldate。这将在文本中提供所需的行为,但在参考书目条目末尾打印“即将到来”。也许这对您来说是可以接受的。如果不行,那么您将需要下面的额外代码来更新 biblatex 宏addendum+pubstate。这是一个改进的版本,其中包含 Moewe 建议的更改。

示例输出

\documentclass{article}

\usepackage[backend=biber,natbib=true,style=authoryear,language=english]{biblatex}
\addbibresource{mybib.bib}

\DeclareLabeldate{%
  \field{date}
  \field{eventdate}
  \field{origdate}
  \field{urldate}
  \field{pubstate}
  \literal{nodate}
}

\renewbibmacro*{addendum+pubstate}{%
  \printfield{addendum}%
  \iffieldequalstr{labeldatesource}{pubstate}{}
  {\newunit\newblock\printfield{pubstate}}}

\begin{document}

\citet{myart} and \citet{Xx}.

\printbibliography

\end{document}

包含mybib.bib

@Article{Xx,
  author =       {Xy, X.},
  title =        {A title},
  journaltitle = {Y. Journal},
  date =         2000
}

@Article{myart,
  author =       {Author, A. N.},
  title =        {On things},
  journaltitle = {J. Jour.},
  pubstate =     {forthcoming}
}

旧代码

如果您的 biblatex 版本较旧,则有两个宏需要更新,您可以按如下方式编码(这是我的原始代码):

\documentclass{article}

\usepackage[backend=biber,natbib=true,style=authoryear,language=english]{biblatex}
\addbibresource{mybib.bib}

\DeclareLabeldate{%
  \field{date}
  \field{eventdate}
  \field{origdate}
  \field{urldate}
  \field{pubstate}
  \literal{nodate}
}

\renewbibmacro*{date+extrayear}{%
  \iffieldundef{\thefield{datelabelsource}year}
    {\printtext[parens]{\printfield{labelyear}}}
    {\printtext[parens]{%
       \iffieldsequal{year}{\thefield{datelabelsource}year}
         {\printlabeldateextra}%
         {\printfield{labelyear}%
          \printfield{extrayear}}}}}%

\renewbibmacro*{addendum+pubstate}{%
  \printfield{addendum}%
  \iffieldundef{\thefield{datelabesource}year}{}
  {\newunit\newblock\printfield{pubstate}}}

\begin{document}

\citet{myart} and \citet{Xx}.

\printbibliography

\end{document}

相关内容