我有一个包含 1,579 个条目的 bib 文件。另一个(非 LaTeX)系统正在读取该文件,我最近发现该系统对键有意见:例如,所有 - 和 _ 元素都被删除了。我想生成文件中所有 bib 键的列表,并且如果可能的话,我想避免编写自制的 RegEx。BibTeX 是否支持仅获取文件中所有键的列表,以便我可以定位有问题的键?
答案1
这bibtool
程序bibtools
(这与其他答案中的 bundle不同)可以做你想做的事。要列出所有包含 key 的条目,-
你可以运行
bibtool -i <bibname.bib> -- 'select.by.string{$key "-"}'
如果你只想打印键而不打印其他字段,你可以将上一个命令的输出通过管道传输到
bibtool -- 'keep.field{$key}'
但如果你使用外部工具和您愿意更改引用键,以便外部工具不会抱怨(并且您不需要使用这些引用键来保持与现有 TeX 文档的兼容性),您可以要求bibtool
规范化引用键,而不是自己编辑它们。有关详细信息,请参阅程序手册中的 A.10 节。
答案2
正如评论中提到的,集合citekeys
中的 shell 脚本bibtools
正是这样做的。如果未安装,您可以从以下位置下载脚本的两个文件(citekeys
和citekeys.bst
)https://ctan.org/tex-archive/biblio/bibtex/utils/bibtools。
不幸的是,该脚本是为 csh/tcsh 编写的,具有一些特定的语法,因此它不适用于 bash/dash(我尝试过),可能也不适用于 zsh、ksh 等(我没有尝试过)。
下面是一个简化版本,我删除了使用 csh 语法的部分,即对多个 bib 文件的支持和用于删除多余文件的清理例程。您仍然需要citekeys.bst
这个,可以从上面的网址下载。
#!/bin/sh -f
#
# citekeys - print out all the cite keys in given bib files
#
# simplified version, adapted from http://mirrors.ctan.org/biblio/bibtex/utils/bibtools/citekeys
#
# usage:
# citekeys file.bib
#
cat > citekeys.aux <<EOF
\relax
\citation{*}
\bibstyle{citekeys}
\bibdata{$1}
EOF
bibtex citekeys
rm citekeys.blg
另存为,例如citekeyssimple
,制作可执行文件(chmod +x citekeyssimple
)并用调用./citekeyssimple yourbibfile.bib
。之后,该 bib 文件中的所有引用键都会列在文件中citekeys.bbl
。
使用随 LaTeX 发行版预安装的示例biblatex-examples.bib
,因此已位于路径中:
./citekeyssimple biblatex-examples.bib
结果(显示前 10 行,完整输出为 92 行):
aksin
almendro
angenendt
aristotle:anima
aristotle:physics
aristotle:poetics
aristotle:rhetoric
augustine
averroes/bland
averroes/hannes