我使用 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},
year
和month
实际上仅支持向后兼容(标准)BibTeX 样式。(请注意,month
和year
仅支持标准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}
答案2
由于您了解并使用month
字段,因此最简单的方法是查找该字段文档那里写着
月字段(文字)
出版月份。这必须是整数,而不是序数或字符串。不要说 month={January} 而是 month={1}。参考书目样式会根据需要将其转换为语言相关的字符串或序数。仅当在数据中明确给出时(例如为了兼容普通的 BibTeX),此字段才是文字字段。但是,最好使用日期字段,因为它支持更多功能。请参阅 §§ 2.3.8 和 2.3.9。
因此,请遵循该建议,使用该date
字段来说明整个日期。