如何神奇地将文件字段添加到 bib 文件中的每个条目中?

如何神奇地将文件字段添加到 bib 文件中的每个条目中?

在 biblatex 的上下文中,有可能bibstyle=reading,这将产生包括abstractannotation字段的参考书目。

以及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}

将产生相同的结果,但无需映射任何字段内容。

相关内容