`.bib`ファイルのBibTexエントリを(どのキーでも)ソートする方法は?


13

私はLaTeXで作業し、Gitでバージョン管理を行っています。書誌管理にはメンデリーを使用します。

問題は、Mendeleyが.bibエクスポートを同期するたびに、それらの順序が異なるため、書誌のバージョン管理がはるかに難しくなることです。

私のアイデアは、.bibコミットする前に毎回、ファイル内のBibTexエントリをソートすることです。

私を助けてくれませんか、これをスマート(ショート&スイート)な方法で行う方法はありますか?:)

PSこのルーチンを手動で実行できます。git統合は必要ありません。プログラム/スクリプトで.bibファイルをソートしたいだけです。


4
この種の質問は、TeX-LaTeX StackExchangeサイトでより多くの聴衆がいる可能性があります。
ステファンギメネス

これがどこに属するのかはわかりません(並べ替えの方法に関するプログラミングの質問についてはStackOverflow、一般的な問題については(La)TeX)。しかし、この質問を* nixに関連付けるものは見当たりません。
me_and

1
@me_and彼はとてもそれが罰金ここで、おそらくですが、LinuxのツールまたはのBibTeXエントリをソートするための簡単なシェルスクリプトの方法を探しているようだ
マイケルMrozek

回答:


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.

これはシェルスクリプトラッピングnawk(およびtrsortおよびgrep)であり、注意が必要な可能性のある2つの警告が含まれています(ソースを参照)。

編集bibtex関連のPerlモジュールもたくさんあります ...)

Edit2 bibtex タグのみでソートされいるように見えますが、任意のキーでソートしたいのですが、そのソース(長すぎない)がまだ役立つと思います...?bibsort



4

参照マネージャーにjabrefは、環境設定にそのようなオプションがあるようです([ファイル]ページの[並べ替え順序]セクションを参照)。また、多くの興味深い機能があります。

ここに画像の説明を入力してください


このオプションは、jabrefの最新バージョンでは削除されました
fccoelho

いいえ、そうではありません。「ファイル」から「ソートのエクスポート」メニューに配置されました。そして、より多くのソート基準が利用可能になりました。
ゾルタンチャティ

4

LinuxでgitとMendeleyを使用して、まったく同じ問題を抱えていました。

私の「解決策」はコマンドラインスクリプトに比べて劣りますが、それでも私を幸せにしました。

(私はすでにemacsを使用していたので、私はMendeleyで作業を行った後、emacsでbibtexファイルのコピーを開き、実行します

M-x bibtex-sort-buffer

emacsで結果を保存し、ソートされた結果をgitにコミットします。

どうやらbibtex-modeはemacsの標準です。何もインストールする必要がなく、emacsは私の '.bib'をbibtexファイルとして自動的に認識したからです。


1

私もこの問題を抱えていましたが、メンデリーではまだ修正されていません。que queの素晴らしい提案に基づいて、emacsを使用して問題を解決しましたが、バッチモードでは、シェルスクリプトでソリューションをうまくラップできました。

まず、次のemacs lispスクリプトを作成しました(bibsort.elと呼びましょう)。

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

これにより、すべてのbibtexファイルがキー名でソートされ、保存されます。コマンドラインからバッチモードでスクリプトを呼び出すことができます。「git diff filenameからの戻りコードをチェックすることにより、Mendeleyが並べ替えた各bibtexファイル(新鮮な参照の有無にかかわらず)ごとに呼び出すシェルスクリプトを作成しました。」(これにより、不必要にLispコードを実行せずに時間を節約できます)変更されていないファイル)。

シェルスクリプトは次のとおりです(想像的に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コミットの前に(必要に応じてファイルのパーミッションを設定した後)実行するだけです:

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

Mendeleyによって追加された追加の非bibtex行には触れず、emacsを使用したUnix / Linuxインストールで動作するはずです。また、Windows(使用している)のGITコンソールでも機能しますが、emacsのMINGWビルドを個別にインストールする必要があります。

私にとって、gitコミットはエレガントで経済的に機能します。お役に立てれば ...


別のbibsort関数を作成する必要はありませんemacs Bibliography.bib --batch -f bibtex-sort-buffer -f save-buffer。それも行います。
ディーンセレネヴィ14年

0

emacs(およびxemacs)にはAUCTeXと呼ばれるアドオンがあり、(他の(La)TeX関連のキーボードショートカットおよびヘルパーの中でも).bibキーによるファイルのソートを含むBibTeXの特別なモードがあります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.