Biblatex 和没有日期的条目

Biblatex 和没有日期的条目

我有一个没有日期的书目条目。我希望这个条目在引用(即在正文中)和参考文献中都打印出来,并带有“nd”,否则它应该与常规条目没有什么不同。

在下面的例子中,我希望引用

列侬 (nd);列侬 (1972)

以及参考文献

列侬,约翰(nd)。世界和平

列侬,约翰(1972)。地球更加和平

\documentclass{article}
\usepackage{csquotes,filecontents}
\usepackage[style=authoryear,dashed=false]{biblatex}
\begin{filecontents}{\jobname.bib}
@BOOK{lennon,
    AUTHOR = "John Lennon",
    TITLE = "Peace on earth"}
@BOOK{lennon1972,
    AUTHOR = "John Lennon",
    TITLE = "More peace on earth",
    YEAR = "1972"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\textcites{lennon}{lennon1972}.
\printbibliography
\end{document}

在此处输入图片描述

答案1

您可以将以下钩子添加到您的序言中:

\newcommand{\mkbibnodate}{n\adddot d\adddot}
\AtEveryCitekey{\iffieldundef{labelyear}{\restorefield{labelyear}{\mkbibnodate}}{}}
\AtEveryBibitem{\iffieldundef{labelyear}{\restorefield{year}{\mkbibnodate}}{}}

使用 biber,你可以使用源映射实现相同的结果:

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map[overwrite=false]{
      \step[fieldset=date,origfieldval,final]
      \step[fieldset=eventdate,origfieldval,final]
      \step[fieldset=origdate,origfieldval,final]
      \step[fieldset=urldate,origfieldval,final]
      \step[fieldset=eventyear,origfieldval,final]
      \step[fieldset=origyear,origfieldval,final]
      \step[fieldset=urlyear,origfieldval,final]
      \step[fieldset=year,fieldvalue={n.d.},final]
      \step[fieldset=sortyear,fieldvalue={0000}]
    }
  }
}

这两种方法都与风格无关,因此它们适用于其authoryear任何变体。

上面的sourcemap是基于默认的labelyear规范:

\DeclareLabelyear{
  \field{year}
  \field{eventyear}
  \field{origyear}
  \field{urlyear}
}

目前\DeclareLabelyear不支持文字字符串,但类似下面的内容会很有用:

\DeclareLabelyear{
  \field{year}
  \field{eventyear}
  \field{origyear}
  \field{urlyear}
  \literal{n.d.}
}

我添加了一个功能要求这个可以在 biblatex github 存储库中找到。

答案2

请尝试使用 SourceForge 的 biblatex 2.6/biber 1.6 开发版本。此设置现在是默认设置,并且有一个新的本地化字符串“nodate”,目前在所有语言中默认为“nd”。\DeclareLabelyear现在更通用:

\DeclareLabeldate{%
  \field{date}
  \field{event}
  \field{orig}
  \field{url}
  \literal{nodate}
}

但除非您是使用此宏的样式作者,否则您不必担心这一点。使用这些版本,您的示例无需任何额外编码即可提供以下内容:

在此处输入图片描述

更改您语言的“nodate”本地化字符串将会更改参考文献和引文中的“nd”。

答案3

\renewbibmacro*{date+extrayear}{%
    \iffieldundef{year}
      {\printtext[parens]{n.d.}}
      {\printtext[parens]{\printdateextra}}}%

\renewbibmacro*{cite:label}{%
  \iffieldundef{label}
    {\printtext[bibhyperref]{\printtext{n.d.}}}
    {\printtext[bibhyperref]{\printfield{label}}}}

相关内容