Làm cách nào để sắp xếp (bằng bất cứ khóa nào) các mục BibTex trong tệp `.bib`?


13

Tôi làm việc với LaTeX và thực hiện phiên bản với Git. Đối với quản lý thư mục tôi sử dụng Mendeley.

Vấn đề là mỗi lần Mendeley đồng bộ hóa .bibxuất khẩu của chúng, chúng lại theo thứ tự khác nhau, điều khiến phiên bản thư mục khó hơn nhiều.

Ý tưởng của tôi là sắp xếp các mục BibTex trong .bibtệp, mỗi lần trước khi cam kết.

Bạn có thể giúp tôi, làm thế nào để làm điều này theo cách thông minh (ngắn & ngọt ngào)? :)

PS Tôi có thể chạy thủ tục này bằng tay. Tôi không cần tích hợp git. Tôi chỉ muốn chương trình / script sắp xếp .bibtập tin.


4
Loại câu hỏi này có thể có đối tượng tốt hơn tại trang web TeX - LaTeX StackExchange.
Stéphane Gimenez

Không chắc đây thuộc về đâu (StackOverflow cho câu hỏi lập trình về cách thực hiện sắp xếp, hoặc (La) TeX cho vấn đề nói chung), nhưng tôi không thấy bất cứ điều gì liên quan đến câu hỏi này với * nix.
me_and

1
@me_and Anh ấy dường như đang tìm kiếm một công cụ Linux hoặc cách viết kịch bản shell đơn giản để sắp xếp các mục BibTeX, vì vậy có lẽ nó ổn ở đây
Michael Mrozek

Câu trả lời:


8

Thế còn 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.

Đó là một kịch bản shell gói nawk(và tr, sortgrep) và bao gồm hai cảnh báo bạn có thể phải chú ý đến (xem nguồn).

( Chỉnh sửa Ngoài ra còn có rất nhiều mô-đun Perl liên quan đến bibtex ...)

Edit2 Tôi chỉ nhận ra rằng bạn muốn sắp xếp cho bất kỳ khóa nào , trong khi bibsortrõ ràng chỉ sắp xếp theo các thẻ bibtex - nhưng có lẽ nguồn của nó (nó không quá dài) vẫn hữu ích ...?



4

Trình quản lý tham chiếu jabrefdường như có một tùy chọn như vậy trong các tùy chọn (xem phần Sắp xếp thứ tự trong trang Tệp). Nó cũng có nhiều tính năng thú vị:

nhập mô tả hình ảnh ở đây


Tùy chọn này đã bị xóa trong các phiên bản gần đây hơn của jabref
fccoelho 16/03/18

Không, nó không có. Nó được đặt từ menu "File" sang "Xuất sắp xếp". Và nhiều tiêu chí sắp xếp hơn có sẵn bây giờ.
Zoltán Csáti

4

Tôi đã có cùng một vấn đề, tùy thuộc vào lựa chọn công cụ của tôi: sử dụng git và Mendeley trên linux.

'Giải pháp' của tôi là ngang bằng so với tập lệnh dòng lệnh, nhưng dù sao nó cũng làm tôi hài lòng, vì vậy đây là:

(tôi cũng đã sử dụng emacs, vì vậy) những gì tôi làm là mở một bản sao của tệp bibtex trong emacs sau khi tôi làm bất kỳ công việc nào ở Mendeley, sau đó tôi chạy

M-x bibtex-sort-buffer

trong emacs, lưu kết quả và cam kết những kết quả được sắp xếp đó vào git.

Rõ ràng chế độ bibtex là tiêu chuẩn trong emacs, vì tôi không phải cài đặt bất cứ thứ gì và emacs tự động nhận ra '.bib' của tôi dưới dạng tệp bibtex.


1

Tôi cũng đã có vấn đề này, mà vẫn chưa được khắc phục ở Mendeley. Dựa trên đề xuất tuyệt vời của que que, tôi đã giải quyết vấn đề của mình bằng cách sử dụng emacs, nhưng ở chế độ hàng loạt, cho phép tôi bọc giải pháp trong một tập lệnh shell.

Trước hết, tôi đã tạo tập lệnh lisp emacs sau (hãy gọi nó là bibsort.el):

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

Điều này sắp xếp bất kỳ tập tin bibtex theo tên khóa và sau đó lưu nó. Bạn có thể gọi tập lệnh trong chế độ hàng loạt từ dòng lệnh. Tôi đã đi xa hơn bằng cách viết một kịch bản shell để gọi nó cho mỗi tệp bibtex mà Mendeley đã sắp xếp lại (có hoặc không có tham chiếu mới), bằng cách kiểm tra mã trả về từ " tên tệp git diff " (điều này giúp tiết kiệm thời gian bằng cách không chạy mã lisp không cần thiết trên tập tin không thay đổi).

Đây là tập lệnh shell (hãy tưởng tượng gọi nó là bibsort.sh), giả sử rằng cả tập tin bibtex và tập lệnh lisp đều nằm trong thư mục hiện tại:

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

Chỉ cần chạy nó (sau khi thiết lập quyền tập tin nếu cần) trước mỗi cam kết git:

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

Nó sẽ không chạm vào các dòng không phải bibtex được thêm bởi Mendeley và sẽ hoạt động trên mọi cài đặt Unix / Linux với emacs. Nó cũng hoạt động trên bảng điều khiển GIT trong Windows (mà tôi đang sử dụng), nhưng bạn sẽ phải cài đặt riêng bản dựng MINGW của emacs.

Đối với tôi, git cam kết bây giờ làm việc thanh lịch và kinh tế. Hi vọng điêu nay co ich ...


Không cần phải tạo bibsortchức năng riêng biệt , emacs Bibliography.bib --batch -f bibtex-sort-buffer -f save-buffercũng sẽ làm điều đó.
Dean Serenevy

0

emacs (và xemacs) có một tiện ích bổ sung có tên AocateeX , trong đó (trong số các phím tắt và trợ giúp phím liên quan (La) TeX khác) có chế độ đặc biệt cho BibTeX, bao gồm sắp xếp .bibcác tệp theo khóa.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.