`.bib` 파일의 BibTex 항목을 임의의 키로 정렬하는 방법은 무엇입니까?

`.bib` 파일의 BibTex 항목을 임의의 키로 정렬하는 방법은 무엇입니까?

저는 LaTeX를 사용하고 버전 관리를 위해 Git을 사용합니다. 서지 관리에는 Mendeley를 사용합니다.

문제는 Mendeley가 .bib내보내기를 동기화할 때마다 순서가 다르기 때문에 서지 버전 관리가 더 어렵다는 것입니다.

.bib내 생각은 커밋하기 전에 매번 파일의 BibTex 항목을 정렬하는 것입니다.

똑똑하고(짧고 달콤한) 방법으로 이 작업을 수행하는 방법을 도와주실 수 있나요? :)

PS 이 루틴을 수동으로 실행할 수 있습니다. Git 통합이 필요하지 않습니다. 나는 단지 프로그램/스크립트가 .bib파일을 정렬하기를 원합니다.

답변1

어때요?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(and tr, sortand ) 를 래핑 grep하고 알아야 할 두 가지 경고를 포함합니다(소스 코드 참조).

(편집하다더 많은 것이 있습니다bibtex 관련 Perl 모듈...)

편집 2방금 당신이 정렬을 원한다는 걸 깨달았어요어느키, 그리고 bibsort분명히 정렬 기준빅텍스 태그단지 - 하지만 그것의 소스(너무 길지 않은)가 여전히 도움이 될 수도 있습니다...?

답변2

당신은 그것을 사용할 수 있습니다bibtool( -s옵션 - 참조 키로 정렬) git post-commit 후크를 사용합니다.

답변3

참조 관리자jabref환경 설정에 그러한 옵션이 있는 것 같습니다(파일 페이지의 정렬 순서 섹션 참조). 또한 다음과 같은 많은 흥미로운 기능이 있습니다.

여기에 이미지 설명을 입력하세요.

답변4

나 역시 이 문제를 안고 있는데 Mendeley는 아직 그 문제를 해결하지 못했습니다. que que의 훌륭한 조언에 따라 나는 emacs를 사용하여 문제를 해결했지만 배치 모드에서는 쉘 스크립트로 솔루션을 훌륭하게 래핑할 수 있었습니다.

먼저 다음 emacs lisp 스크립트를 만들었습니다(bibsort.el이라고 부르겠습니다).

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

그러면 모든 bibtex 파일이 키 이름별로 정렬된 다음 저장됩니다. 명령줄에서 배치 모드로 스크립트를 호출할 수 있습니다. 또한 "git diff"의 반환 코드를 확인하여 Mendeley가 재정렬한 각 bibtex 파일(새 참조 포함 또는 제외)에 대해 호출되는 쉘 스크립트를 작성했습니다.파일 이름"(이렇게 하면 변경되지 않은 파일에 대해 lisp 코드를 실행할 필요가 없으므로 시간이 절약됩니다.)

다음은 bibtex 파일과 lisp 스크립트가 모두 현재 디렉터리에 있다고 가정하는 쉘 스크립트(bibsort.sh라고 가정해 보겠습니다)입니다.

#!/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 콘솔에서도 작동하지만(제가 사용하는) MINGW 버전의 emacs를 별도로 설치해야 합니다.

나에게 있어 git 커밋은 이제 우아하고 경제적으로 작동합니다. 도움이 되었기를 바랍니다...

관련 정보