如何创建一个参考列表,其中精确包含至少在多个不同文档中的一个中引用的项目?我不想包含任何实际上没有引用的参考文献,但引用可以来自多个文档中的一个,并且参考列表应该再次是一份单独的文档。
动机:这似乎是 NSF 资助提案指南所要求的。
附加信息:我正在使用 BibTeX(在 Mac OS X 上使用 BibDesk)。所有参考资料都来自一个*.bib
文件。
答案1
比布工具可以为你做很多工作。以这个.bib
文件为例:
% masterfile.bib
@InProceedings{a,
crossref = {z},
author = {Author, A.},
year = {2001},
title = {Alpha},
}
@InProceedings{b,
crossref = {z},
author = {Buthor, B.},
year = {2002},
title = {Bravo},
}
@Proceedings{z,
editor = {Zuthor, Z.},
year = {1999},
title = {Zulu},
publisher = {Publisher},
address = {Address},
}
@Book{book,
author = {Smith, John},
title = {A Book Title},
publisher = {Publisher},
year = 2000,
address = {Address}}
@Article{article,
author = {Smythe, Jon},
title = {An Artitle Title},
journal = {Journal of Journals},
year = 2000,
volume = 10,
number = 2,
pages = {100--125}}
@Book{notcited,
author = {Schmit, Jean},
title = {An Uncited Book},
publisher = {Publisher},
year = 2001,
address = {Address}}
现在想象两个不同的输入文件:
% file1.tex
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{natbib}
\begin{document}
\cite{a,b,book}
\bibliographystyle{plain}
\bibliography{masterfile}
\end{document}
和
% file2.tex
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{natbib}
\begin{document}
\cite{article,book}
\bibliographystyle{plain}
\bibliography{masterfile}
\end{document}
我们想要构建一个新的(.bib
例如newbibfile.bib
:),其中包含以下 bib 条目:a
、、、和(但不)。对两个文件运行(或) 。这将生成可读取的最重要的文件。命令是:b
z
article
book
notcited
latex
lua|pdf|xelatex
.tex
.aux
bibtool
bibtool
bibtool -x file1.aux -o newbibfile.bib && bibtool -x file2.aux >> newbibfile.bib
此命令从中提取file1
并创建新.bib
文件,然后第二次调用>>
将其输出附加到已创建的文件中newbibfile.bib
。 (如果您需要从两个以上的文件中提取,请相应地修改上述命令。)
... 现在,很多人会注意到两个文件都引用了条目book
,这意味着将有两个book
条目newbibfile.bib
;这不好。好的 BibTeX 感知编辑器可以帮助您找到并处理它们 [Emacs 插件!],但bibtool
也可以检测条目键重复:
bibtool -d newbibfile.bib
如果你想将所有这些组合成一行,你可以这样做:
bibtool -x file1.aux -o temp.bib && bibtool -x file2.aux >> temp.bib && bibtool -d temp.bib -o newbibfile.bib
在我们的用例中,bibtool
有帮助地警告:
*** BibTool WARNING: Possible double entries discovered:
*** book =?= book
*** book
book
中的第二个条目newbibfile.bib
标记为###
。只需找到重复的条目并将其删除即可。
答案2
只是为了完整性起见,使用 BibDesk 的解决方案:
- 生成@jon 答案中给出的所有文件
masterfile.bib
在 BibDesk 中打开- 创建新书目并将其另存为
newbibfile.bib
- 前往菜单
masterfile.bib
并选择Database —> Select Publications From .aux File
- 选择
file1.aux
- 将结果选择的条目拖到包含
newbibfile.bib
- 重复步骤 3 至 6
file2.aux
- 选择重复项(
Database —> Select Duplicates
)并将其删除,以清理newbibfile.bib
。
最后,你可以将参考文献列表打印为单独的文档,如下所示:
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{natbib}
\begin{document}
\nocite{*}
\bibliographystyle{plain}
\bibliography{newbibfile}
\end{document}