`.bib` 파일에서 BibTex 항목을 (어떤 키로) 정렬하는 방법?


13

LaTeX와 함께 일하고 Git으로 버전 관리를합니다. 참고 문헌 관리를 위해 Mendeley를 사용합니다.

문제는 Mendeley가 .bib수출을 동기화 할 때 마다 순서가 다르기 때문에 참고 문헌 버전 관리가 훨씬 어렵다는 것입니다.

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

스마트 (짧고 달콤한) 방식 으로이 작업을 수행하는 방법을 알려 주시겠습니까? :)

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


4
이러한 종류의 질문은 TeX-LaTeX StackExchange 사이트 에서 더 많은 고객을 확보 할 수 있습니다.
Stéphane Gimenez

이것이 어디에 속하는지 확실하지 않지만 (정렬을 수행하는 방법에 대한 프로그래밍 질문의 경우 StackOverflow 또는 일반적으로 문제의 경우 (La) TeX),이 질문과 관련이있는 것은 * nix와 관련이 없습니다.
me_and

1
@me_and 그는 BibTeX 항목을 정렬하는 Linux 도구 또는 간단한 쉘 스크립트 방법을 찾고있는 것 같습니다. 아마 여기가
좋습니다

답변:


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(와 tr, sortgrep)과에 관심을 지불하는 방법이있을 수 있습니다 두 개의 경고 (소스 참조)이 포함되어 있습니다.

( 편집 Bibtex 관련 Perl 모듈 도 많이 있습니다 ...)

Edit2가 난 그냥 당신이 정렬하고 싶습니다 인식 있는 동안, 키 bibsort외관상으로 정렬 하여 BibTex 태그 만 -하지만 어쩌면 소스 아직도 도움이됩니다 (너무 오래 아니다) ...?



4

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

여기에 이미지 설명을 입력하십시오


이 옵션은 jabref
fccoelho

아닙니다. "파일"에서 "내보내기 정렬"메뉴에 배치되었습니다. 이제 더 많은 정렬 기준을 사용할 수 있습니다.
Zoltán Csáti

4

리눅스에서 git과 Mendeley를 사용하는 것과 같은 문제가 발생했습니다.

내 '솔루션'은 명령 줄 스크립트와 비교할 때 하위 수준이지만 그럼에도 불구하고 나를 행복하게 만들었습니다.

(나는 이미 emacs를 사용하고 있었기 때문에) 내가하는 일은 Mendeley에서 작업을 한 후에 emacs에서 bibtex 파일의 사본을 연 다음 실행합니다.

M-x bibtex-sort-buffer

이맥스에서 결과를 저장하고 정렬 된 결과를 git에 커밋하십시오.

분명히 bibtex-mode는 emacs에서 표준입니다. 왜냐하면 아무것도 설치할 필요가 없기 때문이며, emacs는 자동으로 '.bib'를 bibtex 파일로 인식했습니다.


1

나도이 문제를 겪어 왔으며 여전히 Mendeley에서 수정되지 않았습니다. que que의 큰 제안을 바탕으로 emacs를 사용하여 문제를 해결했지만 배치 모드에서는 셸 스크립트로 솔루션을 멋지게 포장 할 수있었습니다.

먼저 다음 emacs lisp 스크립트를 작성했습니다 (bibsort.el이라고 함).

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

이것은 모든 bibtex 파일을 키 이름별로 정렬 한 다음 저장합니다. 명령 행에서 배치 모드로 스크립트를 호출 할 수 있습니다. "git diff filename " 의 리턴 코드를 확인하여 Mendeley가 재정렬 한 (새로운 참조 유무에 관계없이) 각각의 bibtex 파일에 대해 호출하는 쉘 스크립트를 작성하는 데 계속 나아갔습니다 . 변경되지 않은 파일).

여기에 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 commit 전에 (필요한 경우 파일 권한을 설정 한 후) 실행하십시오.

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

Mendeley가 추가 한 비 Bibtex 라인을 건드리지 않으며 emacs를 사용하는 모든 Unix / Linux 설치에서 작동해야합니다. Windows의 GIT 콘솔에서도 작동하지만 (내가 사용하고있는) MINGW 빌드의 emacs를 별도로 설치해야합니다.

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


별도의 bibsort기능 을 만들 필요가 없습니다 emacs Bibliography.bib --batch -f bibtex-sort-buffer -f save-buffer.
Dean Serenevy

0

emacs (및 xemacs)에는 AUCTeX 라는 추가 기능이 있습니다.이 기능 (다른 (La) TeX 관련 키보드 단축키 및 도우미)에는 .bib키 별로 파일 정렬을 포함하여 BibTeX에 대한 특수 모드가 있습니다.


0

커밋이 수행 될 때마다 명령을 실행하려면 git post-commithook이 도움이 될 수 있습니다 (예를 들어 git book설명 참조) .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.