如何使用 BibTeX 在参考文献中引用某篇著作?我想到的是:
史密斯,F.(2019 年)。StackExchange 引用指南. 城市: 出版商。
Jones, G. (2019)。《参考书目中的引文》(Smith 2019)。
我关心的情况是在集合内工作(此处@book
为包含的项目 @incollection
),但我认为解决方案更为通用(且具有普遍兴趣)。
答案1
负责此任务的一般功能是 BibTeX 的crossref
功能。并非所有样式都以您设想的确切方式实现此功能,但许多样式以接近的方式实现此功能。
btxdoc
解释crossref
如下(第2-3页)
BibTeX 有一个新的交叉引用功能,下面通过示例进行说明。假设您
\cite{no-gnats}
在文档中说,并且假设您的数据库文件中有以下两个条目:@INPROCEEDINGS{no-gnats, crossref = "gg-proceedings", author = "Rocky Gneisser", title = "No Gnats Are Taken for Granite", pages = "133-139"} . . . @PROCEEDINGS{gg-proceedings, editor = "Gerald Ford and Jimmy Carter", title = "The Gnats and Gnus 1988 Proceedings", booktitle = "The Gnats and Gnus 1988 Proceedings"}
发生了两件事。
首先,特殊
crossref
字段告诉 BibTeX,该no-gnats
条目应该继承它所交叉引用的条目中缺少的任何字段,gg-proceedings
。在这种情况下,它继承了两个字段editor
和booktitle
。请注意,至少在标准样式中,字段booktitle
与条目类型无关@PROCEEDINGS
。booktitle
字段仅出现在gg-proceedings
条目中,以便交叉引用它的条目可以继承该字段。无论数据库中存在多少篇来自这次会议的论文,此booktitle
字段只需出现一次。发生的第二件事:
gg-proceedings
如果条目被两个或多个条目交叉引用 ,即使您没有或 条目本身, BibTeX 也会自动将该条目放入参考列表中。如果除了条目\cite
之外还有另一个条目交叉引用它,则它将自动出现在参考列表中。\nocite
\cite
\nocite
gg-proceedings
gg-proceedings
no-gnats
但是,为了保证此方案有效,交叉引用条目在数据库文件中的出现位置必须晚于每个交叉引用它的条目。因此,将所有交叉引用条目放在末尾是有意义的。(此外,您可能无法可靠地嵌套交叉引用;也就是说,交叉引用条目本身可能无法可靠地交叉引用条目。但这几乎肯定不是您想要做的事情。)
最后一点:此交叉引用功能与旧 BibTeX 的交叉引用完全无关,后者仍允许使用。因此,拥有如下字段
note = "Jones \cite{jones-proof} improves the result"
不受新功能的影响。
然后,许多风格继续简单地发行,\cite{<crossref parent>}
就像crossref
孩子而不是重复继承的字段。
apalike
与您心中的想法非常接近。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage{apalike}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@incollection{westfahl:frontier,
author = {Westfahl, Gary},
title = {The True Frontier: {Confronting} and Avoiding
the Realities of Space in {American}
Science Fiction Films},
pages = {55-65},
crossref = {westfahl:space},
}
@book{westfahl:space,
editor = {Westfahl, Gary},
title = {Space and Beyond: {The} Frontier Theme in Science Fiction},
year = {2000},
publisher = {Greenwood},
address = {Westport, Conn.},
}
\end{filecontents}
\begin{document}
\cite{westfahl:frontier} \nocite{westfahl:space}
\bibliographystyle{apalike}
\bibliography{\jobname}
\end{document}
请注意crossref
父母这里必须明确地使用\nocite
d(或d),因为只有当它至少被'd 两次\cite
时,它才会自动出现在参考书目中,而不会被\cite
d(或d) 。如果希望父级即使只使用一次也出现,而你又不想理会它们,你可以使用选项调用 BibTeX并将值 1 传递给它\nocite
crossref
\nocite
-min-crossrefs
bibtex -min-crossrefs=1 <filename>
biblatex
也有一个crossref
功能,但其继承规则略微复杂一些(还有一个xref
没有继承的功能)。标准样式没有\cite
父条目,但我的biblatex-ext
捆具有citexref
实现此功能的功能。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=ext-authoryear, citexref]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@collection{westfahl:space,
editor = {Westfahl, Gary},
title = {Space and Beyond},
subtitle = {The Frontier Theme in Science Fiction},
date = {2000},
publisher = {Greenwood},
address = {Westport, Conn.},
}
@incollection{westfahl:frontier,
author = {Westfahl, Gary},
title = {The True Frontier},
subtitle = {Confronting and Avoiding
the Realities of Space in {American},
Science Fiction Films},
pages = {55-65},
crossref = {westfahl:space},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{westfahl:frontier} \nocite{westfahl:space}
\printbibliography
\end{document}
与 BibTeX 一样,父级必须\nocite
明确指定。biblatex
还支持分钟crossref
功能,它被称为mincrossrefs
并且是前导选项(因此您不必担心命令行选项)。使用
\usepackage[backend=biber, style=ext-authoryear, citexref, mincrossrefs=1]{biblatex}
就没有必要去依赖\nocite
父母@collection
了。