Como classificar (por qualquer chave) as entradas do BibTex no arquivo '.bib'?

11

Eu trabalho com LaTeX e faço versionamento com o Git. Para o gerenciamento de bibliografia eu uso o Mendeley.

O problema é que cada vez que Mendeley sincroniza é .bib exportações, eles estão em ordem diferente, o que torna as versões bibliográficas muito mais difíceis.

Minha idéia é classificar as entradas do BibTex no arquivo .bib , cada vez antes de confirmar.

Você poderia me ajudar, como fazer isso de maneira inteligente (curta e doce)? :)

P.S. Eu posso executar essa rotina manualmente. Eu não preciso de integração com o git. Eu só quero programa / script para classificar o arquivo .bib .

    
por Grzegorz Wierzowiecki 09.02.2012 / 11:33

7 respostas

7

Que tal 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.

É um script de shell envolvendo nawk (e tr , sort e grep ) e inclui dois avisos nos quais você deve prestar atenção (consulte a fonte).

( Editar Também há muitos módulos Perl relacionados ao bibtex ...)

Edit2 Acabei de reconhecer que você gostaria de classificar para qualquer chave, enquanto bibsort aparentemente classifica somente as tags bibtex - - mas talvez sua fonte (não é muito longa) ainda seja útil ...?

    
por 09.02.2012 / 11:50
6

Você pode usar bibtool ( -s option - sort de acordo com a chave de referência) com o gancho git post-commit.

    
por 22.09.2014 / 15:51
4

O gerenciador de referência jabref parece ter essa opção nas preferências (consulte a seção Ordem de classificação na página Arquivo). Ele também tem muitos recursos interessantes:

    
por 09.02.2012 / 12:24
3

Eu tive exatamente o mesmo problema, até a minha escolha de ferramentas: usando o git e o Mendeley no linux.

Minha 'solução' é sub-par em comparação com um script de linha de comando, mas mesmo assim me deixou feliz, então aqui está:

(eu também já estava usando o emacs, então) o que eu faço é abrir uma cópia do arquivo bibtex no emacs depois de fazer qualquer trabalho no Mendeley, então eu corro

M-x bibtex-sort-buffer

no emacs, salve os resultados e confirme esses resultados classificados para git.

Aparentemente, o modo bibtex é padrão no emacs, porque eu não tive que instalar nada, e o emacs reconheceu automaticamente o meu '.bib' como um arquivo bibtex.

    
por 19.01.2013 / 22:19
1

Eu também tenho tido esse problema, que ainda não está resolvido no Mendeley. Com base na ótima sugestão do queue, resolvi meu problema usando o emacs, mas no modo batch, permitindo que eu envolvesse a solução em um shell script.

Primeiro, criei o seguinte script emacs lisp (vamos chamá-lo de bibsort.el):

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

Isto classifica qualquer arquivo bibtex pelo nome da chave e salva-o. Você pode chamar o script no modo em lote a partir da linha de comando. Eu fui mais longe escrevendo um script de shell para chamá-lo para cada arquivo bibtex que Mendeley tinha reordenado (com ou sem novas referências), verificando o código de retorno de "git diff filename " (isso economiza tempo não executar o código lisp desnecessariamente em arquivos que não foram alterados).

Aqui está o script de shell (vamos chamar imaginativamente de bibsort.sh), que assume que ambos os arquivos bibtex e o script lisp estão no diretório atual:

#!/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 executá-lo (depois de configurar as permissões de arquivo, se necessário) antes de cada commit do git:

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

Ele não vai tocar nas linhas extras não-bibtex adicionadas por Mendeley, e deve funcionar em qualquer instalação Unix / Linux com o emacs. Ele também funciona no console do GIT no Windows (que eu estou usando), mas você teria que instalar a compilação MINGW do emacs separadamente.

Para mim, o git commits agora funciona de maneira elegante e econômica. Espero que isso ajude ...

    
por 02.03.2014 / 22:39
0

O emacs (e xemacs) tem um add-on chamado AUCTeX , que (entre outros keybord relacionados ao (La) TeX) atalhos e ajudantes) tem um modo especial para BibTeX, incluindo a classificação de .bib arquivos pela chave.

    
por 03.03.2014 / 03:38
0

Se você quer executar um comando toda vez que um commit é feito, talvez o git post-commit hook possa ajudar (veja por exemplo o descrição no livro git .

    
por 03.03.2014 / 03:46