저는 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
, sort
and ) 를 래핑 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 커밋은 이제 우아하고 경제적으로 작동합니다. 도움이 되었기를 바랍니다...