使用 biber 和 biblatex 时,如何将文章的出版日期和月份放入 .bib 文件中?

使用 biber 和 biblatex 时,如何将文章的出版日期和月份放入 .bib 文件中?

我使用 BibTeX 已有一段时间了,现在正在慢慢过渡到 biber 和 biblatex 包。多年来,我被告知,要表明一篇论文发表于(比如说)4 月 1 日,正确的方法是在文件中添加一个如下所示的条目.bib

    month=Apr # " 1"

原因是 是Apr一个内置@string扩展,在当前语言中本地化为四月,#是 BibTex 语言中表示“连接”的东西,并且大多数 bib 样式都没有关于月份日期的规定。

我一直用 biber 做这个并收到如下消息:

WARN - month field 'June 6' in entry 'haber-smithsonian' is not an integer - this will probably not sort properly.

以下是我引入 biblatex 的方法:

\usepackage[style=apa,backend=biber,language=american]{biblatex}
\addbibresource{biblio.bib}

以下是我的打印方法:

%%%%%%%%%%%%%%%%%%%%
%%% Bibliography %%%
%%%%%%%%%%%%%%%%%%%%
\clearpage
\renewcommand{\chapterauthor}{}
\renewcommand{\shortchaptertitle}{Bibliography}
\fancyhead[C]{\emph{\shortchaptertitle}}
\printbibliography
\addcontentsline{toc}{chapter}{Bibliography}

那么,在文件中指明.bib某些内容是在 4 月 1 日发布的正确方法是什么?

答案1

正如所提到的太平洋标准时间回答提供完整日期(精确到天)的最佳方式biblatex是通过date字段。biblatex...date字段支持 ISO 8601 输入,因此您可以说date = {YYYY-MM-DD},,例如

date = {1980-04-01},

yearmonth实际上仅支持向后兼容(标准)BibTeX 样式。(请注意,monthyear仅支持标准date字段:其他日期字段(如urldate、、eventdate...)不能在日期部分中给出。因此,这urlyear不是正确的输入 - 如果它有效,那只是偶然的,您不能或不应该依赖它。)

如果您不想或无法修改您的.bib文件以正确使用date,这里有一个(稍微复杂的)Biber 源图,可以自动将字段中的月日结构映射month到适当的date字段。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map[overwrite]{
      \step[fieldsource=month, match=\regexp{(\d)\s+(\d)}, final]
      \step[fieldsource=year]
      \step[fieldset=regexpeddate, origfieldval]
      \step[fieldset=regexpeddate, fieldvalue={-0$1-0$2}, append]
    }
    \map[overwrite]{
      \step[fieldsource=month, match=\regexp{(\d{2})\s+(\d)}, final]
      \step[fieldsource=year]
      \step[fieldset=regexpeddate, origfieldval]
      \step[fieldset=regexpeddate, fieldvalue={-$1-0$2}, append]
    }
    \map[overwrite]{
      \step[fieldsource=month, match=\regexp{(\d)\s+(\d{2})}, final]
      \step[fieldsource=year]
      \step[fieldset=regexpeddate, origfieldval]
      \step[fieldset=regexpeddate, fieldvalue={-0$1-$2}, append]
    }
    \map[overwrite]{
      \step[fieldsource=month, match=\regexp{(\d{2})\s+(\d{2})}, final]
      \step[fieldsource=year]
      \step[fieldset=regexpeddate, origfieldval]
      \step[fieldset=regexpeddate, fieldvalue={-$1-$2}, append]
    }
    \map{
      \step[fieldsource=regexpeddate, final]
      \step[fieldset=date, origfieldval, final]
      \step[fieldset=month, null]
      \step[fieldset=year, null]
    }
  }
}

\begin{filecontents}{\jobname.bib}
@book{appleby,
  author  = {Humphrey Appleby},
  title   = {On the Importance of the Civil Service},
  year    = {1980},
  month   = Apr # " 1",
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}


\begin{document}
\cite{sigfridsson,appleby}
\printbibliography
\end{document}

Appleby, Humphrey (1980 年 4 月 1 日)。《论公务员制度的重要性》。

答案2

由于您了解并使用month字段,因此最简单的方法是查找该字段文档那里写着

字段(文字)

出版月份。这必须是整数,而不是序数或字符串。不要说 month={January} 而是 month={1}。参考书目样式会根据需要将其转换为语言相关的字符串或序数。仅当在数据中明确给出时(例如为了兼容普通的 BibTeX),此字段才是文字字段。但是,最好使用日期字段,因为它支持更多功能。请参阅 §§ 2.3.8 和 2.3.9。

因此,请遵循该建议,使用该date字段来说明整个日期。

相关内容