在下面的 MWE 中,biblatex-chicago 带有选项cmsdate=both
,而不是像这样打印 origyear 和 year([1956] 1980) 它打印两次年份([1980] 1980),既在文内引用中,也在参考书目条目中。
\documentclass{article} %
\usepackage{polyglossia}
\setdefaultlanguage{english}
\usepackage[authordate, backend=biber,%
bookpages=false, isbn=false, doi=false, numbermonth=false,% don't print doi, isbn, (total) pages for books, and month in articles
mincrossrefs=10,% only include the @collection when more than 10 @incollections unless explicitly cited
longcrossref=true,% no abbreviated citations of @incollection, @inbook, etc.
cmsdate=both]% print both, origdate and date >> change to =off to only print date
{biblatex-chicago}
\DeclareLanguageMapping{american}{cms-american}
\addbibresource{Bibliography.bib}
\begin{document}
\autocite{Jakobson:1980}
\printbibliography
\end{document}
相关 bibfile 条目:
@inbook{Jakobson:1980,
Author = {Jakobson, Roman},
Booktitle = {The Framework of Language},
Location = {Ann Arbor},
Origyear = {1956},
Pages = {81--92},
Publisher = {University of Michigan Press},
Shorttitle = {Metalanguage as a Linguistic Problem},
Title = {Metalanguage as a Linguistic Problem},
Year = {1980}}
之前一直运行良好。不知道在哪里查找错误。
答案1
为什么会发生这种情况?
origyear
不是A支持的输入字段,正确使用的字段是origdate
。
根据经验法则,正确的字段始终是...date
,您永远不应使用单独的字段...year
或。 唯一的例外是出于兼容性原因,可以接受 ,但即使存在 ,也...month
强烈建议 而不是。...day
year
date
year
你会发现 whileorigdate
在§2.2.2 中的已知字段列表中列出数据字段,origyear
不是。origyear
仅在§4.2.4.3中提及日期组件字段,但这是 §4.2.4 的一个小节特殊字段以(重点是我的)开头
以下列表和字段用于
biblatex
将数据传递给参考书目驱动程序和引用命令。它们不在bib
文件中使用,而是由包自动定义。从参考书目或引用样式的角度来看,它们与文件中的字段没有区别bib
。
因此文档中非常清楚不应在文件origyear
中使用.bib
。它几乎可以正常工作,这是 Biber 如何解析...date
字段的产物。
这里具体的问题是什么?
如果你付出,
year = {1980}, origyear = {1956}
你最终会得到
\field{labeldatesource}{year}
\field{origyear}{1956}
\field{year}{1980}
在.bbl
文件中。但是如果正确,date = {1980}, origdate = {1956},
你就会得到
\field{labeldatesource}{orig}
\field{origyear}{1956}
\field{year}{1980}
\field{dateera}{ce}
\field{origdateera}{ce}
的条目...dateera
在这里并不那么相关,但对我们来说重要的是该\field{labeldatesource}
行。该行告诉我们,在第一种情况下,year
被视为主要标签日期,而在第二种情况下,origdate
负责标签日期。
现在biblatex-chicago
有一些真的日期处理的代码很复杂,但本质上代码总是假设labeldate
以下内容
\DeclareLabeldate{
\field{origdate}
\field{date}
\field{year}
\field{eventdate}
\field{urldate}}
因此origdate
优先于date
,即如果origdate
和date
/同时year
存在,origdate
则为labeldate
。如果origyear
使用,则不会发生这种情况。
这就是biblatex-chicago
令人困惑的地方:它假设由于和都origyear
存在year
,所以第一个也必须等于labelyear
。所以它打印labelyear
和year
。但事实证明labelyear
是year
,所以它只是打印了两次相同的年份。
如何修复此问题?
当然,通过使用正确的输入
@inbook{Jakobson:1980,
author = {Jakobson, Roman},
title = {Metalanguage as a Linguistic Problem},
date = {1980},
booktitle = {The Framework of Language},
publisher = {University of Michigan Press},
location = {Ann Arbor},
origdate = {1956},
pages = {81--92},
}
如果您使用参考文献管理器来编写.bib
文件,那么应该有一种方法可以使用origdate
而不是。即使您没有,在文件中origyear
搜索并替换 到 也相当简单origyear
(如果您从来没有 ,这就是所需的全部)。origdate
.bib
origmonth
如果你必须找到一个解决损坏.bib
文件的方法,你可以尝试
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=origyear, fieldtarget=origdate, final]
\step[fieldset=origyear, null]
\step[fieldsource=origmonth, final]
\step[fieldset=origdate, fieldvalue=-, append]
\step[fieldset=origdate, origfieldval, append]
\step[fieldsource=origmonth, null]
\step[fieldsource=origday, final]
\step[fieldset=origdate, fieldvalue=-, append]
\step[fieldset=origdate, origfieldval, append]
\step[fieldsource=origday, null]
}
}
}
或origyear
仅
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=origyear, fieldtarget=origdate, final]
\step[fieldset=origyear, null]
}
}
}
答案2
我不知道在biblatex-chicago
这方面最近发生了什么变化。但手册中提到了origdate
和date
,这与 的术语一致biblatex
。事实上,有了这些字段,它就能按预期工作。
@inbook{Jakobson:1980,
Author = {Jakobson, Roman},
Booktitle = {The Framework of Language},
Location = {Ann Arbor},
Origdate = {1956},
Pages = {81--92},
Publisher = {University of Michigan Press},
Shorttitle = {Metalanguage as a Linguistic Problem},
Title = {Metalanguage as a Linguistic Problem},
Date = {1980}}
结果是: