为多个文档创建单个参考列表

为多个文档创建单个参考列表

如何创建一个参考列表,其中精确包含至少在多个不同文档中的一个中引用的项目?我不想包含任何实际上没有引用的参考文献,但引用可以来自多个文档中的一个,并且参考列表应该再次是一份单独的文档。

动机:这似乎是 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、、、和(但不)。对两个文件运行(或) 。这将生成可读取的最重要的文件。命令是:bzarticlebooknotcitedlatexlua|pdf|xelatex.tex.auxbibtoolbibtool

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 的解决方案:

  1. 生成@jon 答案中给出的所有文件
  2. masterfile.bib在 BibDesk 中打开
  3. 创建新书目并将其另存为newbibfile.bib
  4. 前往菜单masterfile.bib并选择Database —> Select Publications From .aux File
  5. 选择file1.aux
  6. 将结果选择的条目拖到包含newbibfile.bib
  7. 重复步骤 3 至 6file2.aux
  8. 选择重复项(Database —> Select Duplicates)并将其删除,以清理newbibfile.bib

最后,你可以将参考文献列表打印为单独的文档,如下所示:

\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{natbib}
\begin{document}

\nocite{*}
\bibliographystyle{plain}
\bibliography{newbibfile}
\end{document}

相关内容