在 biblatex 的上下文中,有可能bibstyle=reading
,这将产生包括abstract
和annotation
字段的参考书目。
以及file
链接到的字段file.pdf
,即参考文献。如果 bib 条目已file
设置如下:
@book{some-book,
author = {The Author},
title = {The Book Title},
abstract = {Bla bla bla},
annotation = {Bla bla bla},
file = {some-book.pdf}
}
我file.bib
包含许多条目,例如:
@book{some-book,
author = {The Author},
title = {The Book Title},
abstract = {Bla bla bla},
annotation = {Bla bla bla}
}
根据上述想法,我应该转到每个条目并添加:
file = {some-book.pdf}
那将是一项艰巨的工作。 有办法实现自动化吗?
如何file
向每个条目添加字段,而不必转到每个条目并手动添加?
答案1
使用 Biber 的源映射功能可以轻松地向条目添加任意字段内容。
和
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex,overwrite=false]{
\map{
\step[fieldsource=entrykey, match={.*}, final]
\step[fieldset=file, fieldvalue={$1.pdf}]
}
}
}
% just to print the 'file' field
\DeclareFieldFormat{file}{file: \path{#1}}
\renewbibmacro{finentry}{\printfield{file}\finentry}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson,nussbaum,worman,geer}
\printbibliography
\end{document}
您需要向每个条目添加相当于
file = {<entrykey>.pdf},
所有尚无字段的file
条目。
你甚至不需要 RegExes,你可以说
\DeclareSourcemap{
\maps[datatype=bibtex,overwrite=true]{
\map{
\step[fieldsource=entrykey, final]
\step[fieldset=file, origfieldval, final]
\step[fieldset=file, fieldvalue={.pdf}, append]
}
}
}
这将覆盖现有file
字段。之所以overwrite=true
需要,是因为append
步骤必须能够正式覆盖字段。您可以file
通过添加
\step[notfield=file, final]
作为第一步。
file
但为所有条目添加一个包含唯一内容的字段似乎毫无意义。毕竟,<entrykey>.pdf
您添加的信息只是字段中已存在信息的简单函数。entrykey
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\DeclareFieldFormat{fakefile}{file: \path{#1.pdf}}
\renewbibmacro{finentry}{\printfield[fakefile]{entrykey}\finentry}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson,nussbaum,worman,geer}
\printbibliography
\end{document}
将产生相同的结果,但无需映射任何字段内容。