Jak sortować (według dowolnego klucza) wpisy BibTex w pliku `.bib`?


13

Pracuję z LaTeX i robię wersjonowanie z Git. Do zarządzania bibliografią używam Mendeley.

Problem polega na tym, że za każdym razem, gdy Mendeley synchronizuje .bibeksport, są one w innej kolejności, co znacznie utrudnia wersjonowanie bibliografii.

Moim pomysłem jest sortowanie wpisów BibTex w .bibpliku za każdym razem przed zatwierdzeniem.

Czy możesz mi pomóc, jak to zrobić w inteligentny (krótki i słodki) sposób? :)

PS Mogę uruchomić tę procedurę ręcznie. Nie potrzebuję integracji git. Chcę tylko, aby program / skrypt posortował .bibplik.


4
Tego rodzaju pytanie może mieć lepszą publiczność na stronie TeX - LaTeX StackExchange.
Stéphane Gimenez

Nie jestem pewien, do czego to należy (StackOverflow dla programistycznego pytania, jak wykonać sortowanie, lub (La) TeX dla problemu w ogóle), ale nie widzę nic, co wiązałoby to pytanie z * nix.
me_i

1
@me_and Wygląda na to, że szuka narzędzia Linuksa lub prostego sposobu skryptu powłoki do sortowania wpisów BibTeX, więc prawdopodobnie tutaj jest w porządku
Michael Mrozek

Odpowiedzi:


8

Jak o 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.

Jest to opakowanie skryptów powłokinawk (i tr, sorti grep) i zawiera dwa ostrzeżenia, na które być może trzeba zwrócić uwagę (patrz źródło).

( Edytuj Istnieje również wiele modułów Perla związanych z bibtex ...)

Edit2 Właśnie rozpoznałem, że chcesz sortować według dowolnego klucza, podczas gdy bibsortnajwyraźniej sortujesz według znaczników bibtex - ale może jego źródło (nie jest zbyt długie) jest nadal pomocne ...?



4

Menedżer referencji jabrefwydaje się mieć taką opcję w preferencjach (patrz sekcja Kolejność sortowania na stronie Plik). Ma również wiele interesujących funkcji:

wprowadź opis zdjęcia tutaj


Ta opcja została usunięta w nowszych wersjach jabref
fccoelho

Nie, nie ma. Został przeniesiony z menu „Plik” do menu „Eksportuj sortowanie”. Więcej kryteriów sortowania jest już dostępnych.
Zoltán Csáti

4

Miałem dokładnie ten sam problem, aż do wyboru narzędzi: używania git i Mendeley na Linuksie.

Moje „rozwiązanie” jest mniejsze od skryptu wiersza poleceń, ale mimo to mnie ucieszyło, więc oto:

(ja również używałem emacsa, więc) to, co robię, to otwieranie kopii pliku bibtex w emacsie po wykonaniu jakiejkolwiek pracy w Mendeley, a następnie uruchamiam

M-x bibtex-sort-buffer

w emacs, zapisz wyniki i przekaż te posortowane wyniki do git.

Najwyraźniej tryb bibtex jest standardem w emacsie, ponieważ nie musiałem niczego instalować, a emacs automatycznie rozpoznał mój plik „.bib” jako plik bibtex.


1

Ja również miałem ten problem, który wciąż nie został rozwiązany w Mendeley. Opierając się na doskonałej sugestii que que, rozwiązałem swój problem za pomocą emacsa, ale w trybie wsadowym, co pozwala mi dobrze owinąć rozwiązanie w skrypcie powłoki.

Po pierwsze, stworzyłem następujący skrypt emacs lisp (nazwijmy go bibsort.el):

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

Sortuje każdy plik bibtex według nazwy klucza, a następnie zapisuje go. Możesz wywołać skrypt w trybie wsadowym z wiersza poleceń. Poszedłem dalej, pisząc skrypt powłoki, aby wywoływał go dla każdego pliku bibtex, który uporządkował Mendeley (z lub bez świeżych referencji), sprawdzając kod powrotu z „git diff filename ” (oszczędza to czas, nie uruchamiając niepotrzebnie kodu lisp na pliki, które nie uległy zmianie).

Oto skrypt powłoki (nazwijmy go wyobraźni bibsort.sh), który zakłada, że ​​zarówno pliki bibtex, jak i skrypt lisp znajdują się w bieżącym katalogu:

#!/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

Po prostu uruchom go (po ustawieniu uprawnień do pliku, jeśli to konieczne) przed każdym zatwierdzeniem git:

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

Nie dotknie dodatkowych linii innych niż bibtex dodanych przez Mendeleya i powinien działać na każdej instalacji Unix / Linux z emacsem. Działa również na konsoli GIT w systemie Windows (której używam), ale musisz zainstalować osobno kompilację emacsa MINGW.

Dla mnie git commits działa teraz elegancko i ekonomicznie. Mam nadzieję że to pomoże ...


Nie trzeba tworzyć osobnej bibsortfunkcji, emacs Bibliography.bib --batch -f bibtex-sort-buffer -f save-bufferzrobi to również.
Dean Serenevy

0

emacs (i xemacs) mają dodatek o nazwie AUCTeX , który (między innymi skrótami i pomocnikami związanymi z LaX TeX-em) ma specjalny tryb dla BibTeX, w tym sortowanie .bibplików według klucza.


0

Jeśli chcesz uruchamiać polecenie za każdym razem, gdy dokonywane jest zatwierdzenie, być może post-commithaczyk do git może ci pomóc (patrz na przykład opis w książce git) .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.