我有一个 bib 文件,其中包含在线来源。此 bib 文件用于多篇在不同时间编写的文档,并引用了此在线来源。编译是使用 Biber 和 BibLatex 完成的。
现在我必须调整源上的日期以正确反映我访问此资源的时间。但是当我在 bib 文件中执行此操作时,我的所有文档现在都有错误的日期。
我的目标是设置每个文档的访问日期,但从我的 bib 文件中获取所有其他数据。有没有办法覆盖每个文档的条目选项?
答案1
当我读到问题标题时,我立即想到crossref
了Bibtex crossref 字段用于什么?, 哪个@samcarter_is_at_topanswers.xyz已在评论中链接。但对于您的用例,我可能更喜欢 Biber 源映射,以便从文档中轻松覆盖字段值.tex
。
将文件中的值.bib
(2020-02-02) 与源映射设置的值(输出中显示的值)进行比较 (2023-02-20)。请注意,仅当条目urldate
中存在a 时,源映射才会起作用.bib
(它不会将urldate
s 添加到尚无 s 的条目中 - 可以这样做,但可能有点过头了)。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=authoryear]{biblatex}
\DeclareSourcemap{
\maps{
\map[overwrite=true]{
\step[fieldsource=urldate, final]
\step[fieldset=urldate, fieldvalue={2023-02-20}]
}
}
}
\begin{filecontents}{\jobname.bib}
@book{elk,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
url = {https://example.edu/~elk/bronto},
urldate = {2020-02-02},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
Lorem \autocite{sigfridsson,elk}
\printbibliography
\end{document}
此处显示的源图适用于所有条目。如果您需要为不同的条目提供不同的日期,您可以按 进行筛选entrykey
,但这当然可能很快就会变得混乱
\DeclareSourcemap{
\maps{
\map[overwrite=true]{
\step[fieldsource=entrykey, match=\regexp{\Aelk\Z}, final]
\step[fieldsource=urldate, final]
\step[fieldset=urldate, fieldvalue={2023-02-20}]
}
}
}
另请比较biblatex:从特定条目中删除字段。