如何对.bib文件中的BibTex条目进行排序(按任何键)?


13

我使用LaTeX,并使用Gi​​t进行版本控制。对于书目管理,我使用Mendeley。

问题在于,每次Mendeley同步其.bib出口时,它们的输出顺序都不同,这使书目版本控制变得更加困难。

我的想法是.bib每次提交前对文件中的BibTex条目进行排序。

您能帮我吗,如何以灵巧(简短)的方式做到这一点?:)

PS我可以手动运行此例程。我不需要git集成。我只希望程序/脚本对.bib文件进行排序。


4
TeX-LaTeX StackExchange网站上,此类问题可能会吸引更多的听众。
斯特凡希门尼斯

不知道它属于什么地方(有关如何进行排序的编程问题为StackOverflow,或者通常为问题为(La)TeX),但是我看不到任何与此* nix相关的问题。
me_and'Feb

1
@me_and他似乎正在寻找一种Linux工具或简单的shell脚本方式来对BibTeX条目进行排序,因此在这里可能还不错
Michael Mrozek

Answers:


8

怎么bibsort

NAME
     bibsort - sort a BibTeX bibliography file

SYNOPSIS
     bibsort [optional sort(1) switches] < infile >outfile

DESCRIPTION
     bibsort filters a BibTeX bibliography, or bibliography frag-
     ment,  on  its standard input, printing on standard output a
     sorted bibliography.

它是一个shell脚本包装nawk(和trsortgrep),并包含两个您可能需要注意的警告(请参阅源代码)。

编辑还有很多与bibtex相关的Perl模块 ...)

Edit2我刚刚认识到您想对任何键进行排序,而bibsort显然仅按bibtex标签进行排序-但也许它的来源(不太长)仍然很有帮助...?



4

参考管理器jabref似乎在首选项中有这样一个选项(请参阅“文件”页面中的“排序顺序”部分)。它还具有许多有趣的功能:

在此处输入图片说明


这个选项已经在最近版本的JabRef的被删除
fccoelho

不,还没有。它已从“文件”放入“导出排序”菜单。现在可以使用更多的分类标准。
佐尔坦Csáti

4

我遇到了完全相同的问题,一直到我选择的工具:在Linux上使用git和Mendeley。

与命令行脚本相比,我的“解决方案”较差,但尽管如此,它仍然让我感到高兴,因此这里是:

(我也已经在使用emacs,因此)在Mendeley中进行任何工作后,我要做的是在emacs中打开bibtex文件的副本,然后运行

M-x bibtex-sort-buffer

在emacs中,保存结果,然后将排序后的结果提交给git。

显然bibtex模式是emacs的标准配置,因为我不需要安装任何东西,而emacs会自动将我的'.bib'识别为bibtex文件。


1

我也一直有这个问题,在Mendeley中仍然没有解决。基于que que的很好建议,我使用emacs解决了我的问题,但是以批处理方式,很好地允许我将解决方案包装在shell脚本中。

首先,我创建了以下emacs lisp脚本(我们称其为bibsort.el):

( defun bibsort()
    ( bibtex-sort-buffer )
    ( save-buffer )
)

这将根据关键字名称对所有bibtex文件进行排序,然后将其保存。您可以从命令行以批处理方式调用脚本。我进一步编写了一个shell脚本,以检查Mendeley重新排序的每个bibtex文件(有或没有新引用),方法是检查“ git diff filename ” 的返回代码(这样可以节省时间,因为不必在不需要的情况下运行lisp代码尚未更改的文件)。

这是shell脚本(我们将其想象为bibsort.sh),它假定bibtex文件和lisp脚本都在当前目录中:

#!/bin/bash

bibliobasher() {

    IFS=$( echo -en "\n" )
    BIBFILES=*.bib

    for bibfile in $BIBFILES
    do
        git diff --quiet "$bibfile" 2> /dev/null
        if [ $? = 1 ]; then
            emacs --batch -l bibsort.el "$bibfile" -f bibsort
        fi
    done
}

bibliobasher

只需在每次git commit之前运行它(如果需要,在设置文件权限之后):

chmod a+x bibsort.sh
./bibsort.sh
git commit ...

它不会碰到Mendeley添加的额外的非bibtex行,并且可以在任何带有emacs的Unix / Linux安装上使用。它也可以在Windows(我正在使用)的GIT控制台上运行,但是您必须单独安装emacs的MINGW构建。

对我来说,git commits现在可以优雅,经济地工作。希望这可以帮助 ...


无需创建单独的bibsort功能,emacs Bibliography.bib --batch -f bibtex-sort-buffer -f save-buffer也将这样做。
Dean Serenevy 2014年

0

emacs(和xemacs)具有一个名为AUCTeX的加载,(除与(La)TeX相关的其他键盘快捷键和辅助程序之外)它具有BibTeX的特殊模式,包括.bib按键对文件进行排序。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.