如何提取 BibTeX 条目(如 DOI、摘要等)

如何提取 BibTeX 条目(如 DOI、摘要等)

我想要自动生成个人阅读笔记,我希望能够从 BibTeX 条目(year或除外author)中自动提取字段的内容。

例如,给定一个 BibTeX 条目

@article{einstein05,
   author={Albert Einstein},
   title={Zur Elektrodynamik bewegter K{\"o}rper},
   abstract={Interesting article, which claims that time is relative.},
   journal={Annalen der Physik und Chemie},
   volume={17},
   year={1905},
   pages={891--921}
}

我希望我的 TeX 文件中有一个宏(例如\citeabstract),它将返回字符串Interesting article, which claims that time is relative.(DOI 等也是一样)

我找到了\printfield可能对我有帮助的命令,但我还不够聪明,不知道如何使用它。

我不知道这是否对答案有影响,但我正在使用 BibLaTeX+BibTeX。

答案1

您至少有两种选择可以实现此目的。

\citefield和朋友

我们可以使用\citefield和朋友来访问任何参考书目条目的任何字段,使用

\citefield[<prenote>][<postnote>]{<key>}[<format>]{<field>}

语法(因此\citefield确实像正常的 cite 命令一样工作)。

然而,需要注意的是,biblatex人们通常所称的数据字段有三种类型 (1) field- 包含一个项目的字段,例如titlejournaltitledoi,还有范围字段,例如pages,(2)list项目列表,例如publisher(一本书可能由很多出版商出版,显然),address(出版商可能在纽约和柏林各有一个办公室),以及 (3) 的名称列表authoreditor等等。由于这三种类型需要不同的处理,因此有\citefield\citelist\citename(参见 §3.7.7低级命令,第 91 页biblatex文档)。因此,我们需要\cite*为该工作选择正确的命令,如果不清楚选择哪一个,biblatex文档在§2.2 中列出了所有可用字段(广义上)。输入字段从第 13 页开始一直到第 30 页。

因此,您可以使用\citefield{einstein05}{abstract}\citefield{einstein05}{doi}来引用示例条目的摘要和 DOI,但\citename{einstein05}{author}(其功能与此处基本相同\citeauthor)显示作者的姓名。

请注意,\cite*默认情况下(即如果可选参数<format>为空),命令使用通用格式和作为输出citename,而不管您要打印的字段是什么。因此,如果格式与普通格式不同,则必须明确指定格式。如果您希望 DOI 格式化为其通常格式,则需要发出。请参阅中的讨论citelistcitelistcite...doi\citefield{einstein05}[doi]{doi}biblatex:参考文献部分之外的可点击 doi。如果您使用下面描述的第二种方法,此限制(或功能)就会消失。

自定义命令

如果你确实需要abstract经常引用该字段,你可能希望节省一些输入(尤其是那些讨厌的花括号),那么你可以声明\citeabstract如下命令

\DeclareCiteCommand{\citeabstract}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {\printfield{abstract}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

并像 一样使用它\citeabstract{einstein05}

此命令将始终在适当的上下文中为打印字段选择适当的格式。当然,这可以通过 的可选参数明确覆盖\printfield

相关内容