我想要自动生成个人阅读笔记,我希望能够从 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
- 包含一个项目的字段,例如title
、journaltitle
或doi
,还有范围字段,例如pages
,(2)list
项目列表,例如publisher
(一本书可能由很多出版商出版,显然),address
(出版商可能在纽约和柏林各有一个办公室),以及 (3) 的名称列表author
,editor
等等。由于这三种类型需要不同的处理,因此有\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 格式化为其通常格式,则需要发出。请参阅中的讨论citelist
citelist
cite...
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
。