如何组织手动编辑的.bib 文件?

如何组织手动编辑的.bib 文件?

通常我使用 zotero 及其bibtex/biblatex导出工具来创建.bib文件。但这种方法不会让你掌控参考书目,如果 zotero 无法检索正确的数据(或者转换为 bib(La)TeX 有误),你可能会在参考文献中重现错误。

因此,我正在考虑是否能回到以前的方法;在单个.bib手动编辑的文件中管理我的参考书目。我以前是借助 Emacs+AUCTeX 来实现这一点的。使用 Emacs 输入不同的字段并创建参考文献非常简单。然而,文件没有组织;引用没有顺序。Emacs 将引用写在光标所在的位置。

我希望这个.bib文件内有一些最低限度的顺序。例如,参考文献可以按作者姓名的字母顺序排列。我该如何实现这一点?更一般地说,有哪些工具可以.bib手动管理文件?(例如在文件内搜索)。我必须明确我不想使用 JabRef。

答案1

比布工具可以对.bib文件进行排序,以及执行许多其他操作。虽然我确实手动编辑参考书目文件,但我很少使用它来完成此任务,因为它emacs提供了更好的解决方案(例如,参见 giordano 的评论)。

要按 bibkey 排序,很简单(为清楚起见,这里没有对选项进行分组):

bibtool -s -i input.bib -o output.bib

要按 bibkey 反向排序,请使用:

bibtool -S -i input.bib -o output.bib

(请注意,此工具因此鼓励合理的 bibkey 命名策略。理想情况下,您的 bibkey 在逻辑上与作者或编辑者字段相连。例如,John Smith 撰写并于 2000 年发表的文章将具有类似于smith2000bibkey 的内容。如果需要进一步消除歧义,我建议添加前四个单词的首字母:因此smith2000aaos可能用于 Smith 的文章,标题为“关于东西的文章”。我的.bib文件有大约 2700 个条目 [并且还在增长],并且此系统没有重复的 bibkey。)

[编辑:] bibtool 的最新版本允许按特定字段排序。例如,要按作者排序,请使用

bibtool -s –sort.format=”%N(author)” input.bib output.bib

查看手动的更多细节。

答案2

Emacs 包含bibtex-mode,它提供添加、编辑和维护 .bib 文件的功能。它将按字母顺序维护您的条目。它还可以配置为根据作者、年份、标题等自动生成新条目的密钥。在我的例子中,它以 的形式生成一个密钥author_author_year,因此密钥看起来与使用 natbib 处理后的条目非常相似。

您可以使用 在 Emacs 内部找到文档C-h m bibtex-mode

答案3

我使用 notepad++ 以及复制和粘贴手动管理我的所有 bib 文件,这让我走了很长的路:每个条目都只是文本,所以只要你的文件不是太长,你就可以手动复制和粘贴它们。

对于较长的文件,事情就比较棘手了。我还没听说过有专门用于对 bib 文件进行排序的程序。不过,LaTeX 并不关心间距,因此您可以将每个条目放在一行上,然后使用类似 unix 命令的命令sort将它们按顺序排列并保存新文件。

答案4

排序条目格式合理的文件:

python bibsort.py references.bib

哪里bibsort.py

"""Sorts a *formatted* file that has @'s at the beginning of the line."""

import sys

filenames = sys.argv[1:]

for filename in filenames:
    entries = []

    # Parse file. Assume reasonably well-formatted.
    with open(filename) as f:
        for line in f:
            if line.startswith("@"):
                entries.append([])
            entries[-1].append(line)

    # Sort by "key" in "@misc{key,".
    entries.sort(key=lambda lines: lines[0].split("{")[1].lower())

    # Save sorted file.
    with open(filename, "w") as f:
        f.write("".join(x for xs in entries for x in xs))

这只适用于如下文件:

@misc{tolkien1954lotr,
    ...
}

但不适用于如下文件:

          @misc{
tolkien1954lotr,
  ...     }       @misc  {   
      subpar2020formatting, author 
 = {    What Is Formatting et al.}, } @article{...}

...因此,您可能需要biber事先bibtool进行操作,以便以良好的方式格式化文件。(有关如何使用这些工具,请参阅其他答案。)

相关内容