我有一个由参考文献管理程序(Citavi,但也可以是其他任何程序)生成的大型参考书目。urldate
所有参考文献的字段格式为urldate = {dd.mm.yyyy}
,这对于不正确biblatex
。但是,我不想每次从参考文献管理应用程序更新我的大型参考书目时都更改此字段。事实上,我没有收到任何错误,但收到许多警告,例如下面的警告。
Package biblatex Warning: Biber reported the following issues
(biblatex) with 'XYZ.2003':
(biblatex) - Datamodel: Entry 'XYZ.2003' (bibliographie.bib)
: Invalid format '18.11.2013' of date field 'urldate' - ignoring.
我不想有这些警告,因为对于许多参考书目条目来说,这种类型的警告将占据主导地位,并且很难看到相关的警告。
即这些警告需要以某种方式被抑制
为了完整性(部分使用示例使用 biblatex 查找未使用的 bibkeys),
\begin{filecontents*}{bibliograp.bib}
@BOOK{Ab_Steg,
author = "M. Abramowitz and I. A. Stegun",
title = {Handbook of mathematical functions},
publisher = "Dover publications",
year = "1965",
urldate = {15.10.2013},
language="English" }
\end{filecontents*}
\documentclass[11pt,onecolumn,twoside]{scrbook}
\usepackage[style=numeric-comp,
backend=biber,
date=short,
firstinits=true,
language=english]{biblatex}
\AtEveryBibitem{\clearlist{urldate}}
\AtEveryBibitem{\clearlist{abstract}}
\addbibresource[datatype=bibtex]{bibliograp.bib}
\begin{document}
hello world \cite{Ab_Steg}
\printbibliography
\end{document}
可以看出,\AtEveryBibitem{\clearlist{urldate}}
这并不能阻止警告。我还期望选项language=german
中的(即放弃英语日期标准)biblatex
可以解决问题,但这也无济于事。
答案1
biblatex
正确地警告您字段格式不正确,因此最好的解决方案是消除这种情况并使用正确的日期格式yyyy-mm-dd
;由于您使用引文管理器,这应该像告诉引文管理器正确导出日期一样简单(我不知道这实际上有多难)。
由于您不想这样做 - 而且您urldate
无论如何都不需要该字段,因此一种解决方案就是删除该字段\AtEveryBibitem{\clearfield{urlyear}}
,但这当然仍然会发出警告,因为从技术上讲,biber
仍在处理该字段(并且仍然注意到它格式不正确)。请注意,您在这里不使用\clearfield{urldate}
,因为biblatex
将日期字段分解为年、月和日部分 - 删除年份足以抑制字段的输出。
为了消除错误,我们需要防止biber
看到坏字段,因此我们只需添加
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite=true]{
\step[fieldset=urldate, null]
}
}
}
到我们的序言。这将告诉biber
丢弃urldate
字段甚至没有仔细观察。
在我的测试运行中,MWE 没有任何抱怨
\begin{filecontents*}{bibliograp.bib}
@BOOK{Ab_Steg,
author = "M. Abramowitz and I. A. Stegun",
title = {Handbook of mathematical functions},
publisher = "Dover publications",
year = "1965",
urldate = {15.10.2013},
language="English" }
\end{filecontents*}
\documentclass[11pt,onecolumn,twoside]{scrbook}
\usepackage[style=numeric-comp,
backend=biber,
date=short,
firstinits=true,
language=english]{biblatex}
\AtEveryBibitem{\clearlist{abstract}}
\addbibresource[datatype=bibtex]{bibliograp.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite=true]{
\step[fieldset=urldate, null]
}
}
}
\begin{document}
hello world \cite{Ab_Steg}
\printbibliography
\end{document}
一个积极的影响是,你可以摆脱,\AtEveryBibitem{\clearfield{urlyear}
因为那块地在以后的道路上会被忽略(假设我们在这里上坡行驶)。
答案2
这可能是忽略警告的另一种方法;这些警告来自文件\warn
中的命令.bbl
:
$ sed -n '/\\warn/p' my_new_article.bbl
\warn{\item Overwriting field 'year' with year value from field 'date' for entry 'author2001paper'}
\warn{\item Overwriting field 'month' with month value from field 'date' for entry 'author2001paper'}
\warn{\item Overwriting field 'year' with year value from field 'date' for entry 'author2002paper'}
...
显然,如果我们摆脱这些行,我们就不应该再被 Latex 运行中的警告所困扰;上面的sed
语句已经打印确认我们的匹配正则表达式是正确的;我们需要做的就是D
删除行(换行)并保存文件的就地替换:
sed -i '/\\warn/D' my_new_article.bbl
然后当我运行 时pdflatex my_new_article.tex
,我再也看不到那些警告了。当然,每次运行biber
或bibtex
重新生成文件后都必须这样做(但如果你运行的次数比/更频繁.bbl
,那么这样做可能会有回报)latex
bibtex
biber
答案3
我收到如下错误
使用条目“bibtexkey”的字段“date”中的月份值覆盖字段“month”
使用条目“bibtexkey”中字段“date”的年份值覆盖字段“year”
我用以下方法让他们安静下来
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite=true]{
\step[fieldset=urldate, null]
\step[fieldset=month, null]
\step[fieldset=year, null]
}
}
}
在序言中,但请注意,这可能会删除参考书目中的月份和年份。
此答案使用了之前帖子中的信息https://tex.stackexchange.com/a/150723/110064