Come ordinare (con qualunque chiave) le voci BibTex nel file `.bib`?


13

Lavoro con LaTeX e eseguo il versioning con Git. Per la gestione della bibliografia uso Mendeley.

Il problema è che ogni volta che Mendeley sincronizza le sue .bibesportazioni, sono in un ordine diverso, il che rende molto più difficile il versioning della bibliografia.

La mia idea è quella di ordinare le voci BibTex nel .bibfile, ogni volta prima del commit.

Potresti aiutarmi, come farlo in modo intelligente (breve e dolce)? :)

PS: posso eseguire questa routine manualmente. Non ho bisogno di integrazione git. Voglio solo programma / script per ordinare i .bibfile.


4
Questo tipo di domanda potrebbe avere un pubblico migliore sul sito TeX - LaTeX StackExchange.
Stéphane Gimenez

Non sono sicuro di dove appartenga (StackOverflow per la domanda di programmazione su come eseguire l'ordinamento o (La) TeX per il problema in generale), ma non vedo nulla che colleghi questa domanda a * nix.
io_e il

1
@me_and Sembra che stia cercando uno strumento Linux o un semplice modo di script shell per ordinare le voci BibTeX, quindi probabilmente qui va bene
Michael Mrozek

Risposte:


8

Che ne dici 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.

Si tratta di uno script di shell involucro nawk(e tr, sorte grep) ed include due avvertimenti che potreste avere a prestare attenzione alla (vedi fonte).

( Modifica Ci sono anche molti moduli Perl relativi a bibtex ...)

Edit2 Ho appena riconosciuto che ti piacerebbe ordinare qualsiasi chiave, mentre bibsortapparentemente ordina solo per i tag bibtex - ma forse la sua fonte (non è troppo lunga) è ancora utile ...?



4

Il gestore di riferimento jabrefsembra disporre di tale opzione nelle preferenze (vedere la sezione Ordinamento nella pagina File). Ha anche molte caratteristiche interessanti:

inserisci qui la descrizione dell'immagine


Questa opzione è stata rimossa nelle versioni più recenti di jabref
fccoelho il

No, no. È stato inserito dal menu "File" al menu "Esporta ordinamento". E ora sono disponibili altri criteri di ordinamento.
Zoltán Csáti,

4

Ho avuto lo stesso identico problema, fino alla mia scelta di strumenti: usare git e Mendeley su Linux.

La mia 'soluzione' è inferiore alla paragone di uno script da riga di comando, ma ciò nonostante mi ha reso felice, quindi eccolo:

(stavo già usando emacs, quindi) quello che faccio è aprire una copia del file bibtex in emacs dopo aver fatto qualsiasi lavoro a Mendeley, quindi corro

M-x bibtex-sort-buffer

in emacs, salva i risultati e impegna i risultati ordinati in git.

Apparentemente la modalità bibtex è standard in emacs, perché non ho dovuto installare nulla ed emacs ha riconosciuto automaticamente il mio '.bib' come file bibtex.


1

Anch'io ho avuto questo problema, che non è stato ancora risolto a Mendeley. Sulla base del grande suggerimento di que que, ho risolto il mio problema usando emacs, ma in modalità batch, permettendomi di avvolgere la soluzione in uno script di shell.

Prima di tutto, ho creato il seguente script emacs lisp (chiamiamolo bibsort.el):

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

Questo ordina qualsiasi file bibtex in base al nome della chiave e quindi lo salva. È possibile chiamare lo script in modalità batch dalla riga di comando. Sono andato oltre nello scrivere uno script di shell per chiamarlo per ogni file bibtex che Mendeley aveva riordinato (con o senza riferimenti freschi), controllando il codice di ritorno da "git diff nomefile " (questo fa risparmiare tempo non eseguendo il codice lisp inutilmente su file che non sono stati modificati).

Ecco lo script della shell (chiamiamolo in modo fantasioso bibsort.sh), che presume che sia i file bibtex sia lo script lisp siano nella directory corrente:

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

Basta eseguirlo (dopo aver impostato le autorizzazioni del file, se necessario) prima di ogni commit git:

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

Non toccherà le linee extra non bibtex aggiunte da Mendeley e dovrebbe funzionare su qualsiasi installazione Unix / Linux con emacs. Funziona anche sulla console GIT di Windows (che sto usando), ma dovresti installare la build di emacs MINGW separatamente.

Per me, git si impegna ora a lavorare in modo elegante ed economico. Spero che sia di aiuto ...


Non è necessario creare la bibsortfunzione separata , emacs Bibliography.bib --batch -f bibtex-sort-buffer -f save-bufferlo farà anche.
Decano Serenevy,

0

emacs (e xemacs) hanno un componente aggiuntivo chiamato AUCTeX , che (tra le altre scorciatoie e aiutanti di tastiera (La) relativi a TeX ha una modalità speciale per BibTeX, incluso l'ordinamento dei .bibfile per chiave.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.