未使用的参考书目条目 - 如何检查哪些条目未使用?

未使用的参考书目条目 - 如何检查哪些条目未使用?

这个问题导致了一个新的方案的出现:
checkcites

在阅读论文时,我会将我想参考或提及的内容放在自定义.bib文件中(.bib每篇论文一个文件)。(感谢门德利它非常简单和直接 - 他们称之为“收藏”。

我的意图是.bib文件中的所有条目都应在文中提及。

如何检查我尚未参考过哪些书目条目?

答案1

另一种方法是使用refcheck包并添加\nocite{*}到您的文档中。此包将警告您(除其他事项外)未使用的引用。我的 MWE:

\begin{filecontents}{\jobname.bib}
@BOOK{foo:2012a,
  title = {My Title One},
  publisher = {My Publisher One},
  year = {2012},
  editor = {My Editor One},
  author = {Author One}
}

@BOOK{foo:2012b,
  title = {My Title Two},
  publisher = {My Publisher Two},
  year = {2012},
  editor = {My Editor Two},
  author = {Author Two}
}

@BOOK{foo:2012c,
  title = {My Title Three},
  publisher = {My Publisher Three},
  year = {2012},
  editor = {My Editor Three},
  author = {Author Three}
}
\end{filecontents}

\documentclass{article}

\usepackage{refcheck}

\begin{document}

Hello world \cite{foo:2012a,foo:2012b}.

\nocite{*}

\bibliographystyle{plain}
\bibliography{\jobname}

\end{document}

输出:

我的输出

文档中未引用的参考文献关键字将显示在 之间?...?。此外,refcheck将以下行添加到您的.log文件中:

<Info by RefCheck> Unused bibitem `foo:2012c' on page 1.

希望能帮助到你。:)

更新:基于这个问题,埃格尔我写了一个名为checkcites。该脚本的目的是从 LaTeX 辅助文件 ( .aux) 或参考书目 ( .bib) 文件中检测未使用或未定义的引用。

请考虑以下示例:document.tex

\begin{filecontents}{\jobname.bib}
@BOOK{foo:2012a,
  title = {My Title One},
  publisher = {My Publisher One},
  year = {2012},
  editor = {My Editor One},
  author = {Author One}
}

@BOOK{foo:2012b,
  title = {My Title Two},
  publisher = {My Publisher Two},
  year = {2012},
  editor = {My Editor Two},
  author = {Author Two}
}

@BOOK{foo:2012c,
  title = {My Title Three},
  publisher = {My Publisher Three},
  year = {2012},
  editor = {My Editor Three},
  author = {Author Three}
}

@BOOK{foo:2012d,
  title = {My Title Four},
  publisher = {My Publisher Four},
  year = {2012},
  editor = {My Editor Four},
  author = {Author Four}
}
\end{filecontents}

\documentclass{article}

\begin{document}

Hello world \cite{foo:2012a,foo:2012c},
how are you \cite{foo:2012e}, and
goodbye \cite{foo:2012d,foo:2012a}.

\bibliographystyle{plain}
\bibliography{\jobname}

\end{document}

编译后document.aux会生成一个辅助文件,现在我们使用texlua(MiKTeX 和 TeX Live 发行版中都有)来运行checkcites.aux文件:

$ texlua checkcites.lua document.aux

该脚本将查找所有未使用和未定义的引用。输出将是:

检查引文终端

如果您只想查找.bib文件中未使用的引用,则可以添加--unused标志:

$ texlua checkcites.lua --unused document.aux

参数顺序无关紧要,因此您也可以调用:

$ texlua checkcites.lua document.aux --unused 

类似地,使用

$ texlua checkcites.lua --undefined foo.aux

将使脚本仅在.tex文件中查找未定义的引用。

要查找未使用和未定义的引用,您还可以使用标志--all。如果没有提供标志,checkcites则将表现得像--all已提供一样。

该脚本现已可用在 CTAN并将tlmgr在 TeX Live 2011(或更高版本)上安装它。希望你们喜欢我们的简陋脚本。:)

更新:正如checkcites现在在 CTAN 和 TeX Live 上可用的那样,不需要显式调用texlua,也不需要原始checkcites.lua文件;只需简单调用

$ checkcites --unused document.aux

就足够了,因为脚本已经被正确包装了。:)

答案2

这个问题值得一个简短的回答,以说明它是多么简单checkcites确实是。在提示符下只需输入...

$ checkcites my_document.aux

...它会打印出格式良好的未使用+未定义的引用列表。

如果您已完整安装最新的 TeX-Live 发行版 (2011+),则此命令可立即使用,其中该命令checkcites应已包含在您的路径中。这是一个简单的命令行工具;无需对您的文档进行任何修改(例如usepackage)。

我希望我的回答可以阻止其他人手动从 CTAN 下载脚本、研究文档,只是为了发现在这种情况下 RTFM 是多余的:)。

答案3

一种可能性如下:

  1. 将 bibtex 书目样式切换为unsrt(使用 biblatex 传递sorting=none选项)
  2. 编译您的文档 --> 带有引用参考文献的 PDF
  3. 在文档的最末尾(命令之前\bibliography)添加一个\nocite{*}
  4. 编译您的文档 --> 包含所有参考资料的 PDF
  5. 比较两个 PDF 的参考书目。末尾的“额外”条目是您尚未引用的条目。

但是,如果您在类似 UNIX 的环境中工作,我可能会使用 grep 和 sed 之类的工具从 .aux 文件和 .bib 文件中提取密钥并对其进行区分:

cat paper.aux | grep '\\citation' | sed -e 's/\\citation{\(.*\)}/\1/g' -e 's/ *\(.*\) */\1/g' | tr ',' '\012' | sort -u > paper.keys
cat paper.bib | grep "@.*{.*," | sed -e 's/.*{\(.*\),/\1/' | sort -u > bib.keys
grep -v -f paper.keys bib.keys

第一行将\citation{key1[,key2 ...]}aux 文件中命令中给出的所有键提取到不同的行中,对它们进行排序和统一(每个条目包含一次)并将结果重定向到文件paper.keys。第二行对 bib 文件中行中包含的键执行相同操作@<some type>{key,。第三行打印出bib.keys不包含在中的每一行paper.keys,这是您感兴趣的增量。

答案4

这个答案会给你一个线索,但我相信只适用于 biblatex。(我不会在这里重复)

它允许您将\nocite{*}所有未引用的.bib文件条目放在参考书目的单独部分中。

通常,人们可能会将其发布为“附加阅读内容”,但在您的情况下,您可以使用它来帮助修剪您的.bib文件。

相关内容