วิธีการเรียงลำดับรายการ BibTex (ตามคีย์ใด ๆ ) ในไฟล์ `.bib`


13

ฉันทำงานกับ LaTeX และทำเวอร์ชันกับ Git สำหรับการจัดการบรรณานุกรมฉันใช้ Mendeley

ปัญหาคือทุกครั้งที่ Mendeley ซิงโครไนซ์การ.bibส่งออกมันมีลำดับที่แตกต่างกัน

ความคิดของฉันคือการเรียงลำดับรายการ BibTex ใน.bibไฟล์แต่ละครั้งก่อนส่ง

คุณช่วยฉันได้ทำอย่างไรในวิธีที่ฉลาด (สั้น & หวาน)? :)

PS ฉันสามารถเรียกใช้รูทีนนี้ด้วยตนเองได้ ฉันไม่ต้องการการรวมคอมไพล์ ฉันต้องการให้โปรแกรม / สคริปต์เรียง.bibไฟล์


4
คำถามประเภทนี้อาจมีผู้ชมที่ดีกว่าในไซต์TeX - LaTeX StackExchange
Stéphane Gimenez

ไม่แน่ใจว่าสิ่งนี้อยู่ที่ใด (StackOverflow สำหรับคำถามการเขียนโปรแกรมเกี่ยวกับการเรียงลำดับหรือ (La) TeX สำหรับปัญหาโดยทั่วไป) แต่ฉันไม่เห็นสิ่งใดที่เกี่ยวข้องกับคำถามนี้ * ระวัง
me_and

1
@me_and ดูเหมือนว่าเขากำลังมองหาเครื่องมือ Linux หรือวิธีเชลล์สคริปต์แบบง่าย ๆ ในการเรียงลำดับรายการ BibTeX ดังนั้นมันอาจจะดีที่นี่
Michael Mrozek

คำตอบ:


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, sortและgrep) และรวมถึงสองคำเตือนคุณอาจจะต้องใส่ใจกับ (ดูแหล่งที่มา)

( แก้ไขนอกจากนี้ยังมีโมดูล Perl ที่เกี่ยวข้องกับ bibtexจำนวนมาก... )

Edit2ฉันเพิ่งรู้ว่าคุณต้องการเรียงลำดับสำหรับคีย์ใด ๆในขณะที่bibsortเรียงลำดับตามแท็ก bibtexเท่านั้น - แต่อาจแหล่งที่มาของมัน (ไม่ยาวเกินไป) ยังคงมีประโยชน์ ... ?


7

คุณสามารถใช้bibtool( -sตัวเลือก - เรียงลำดับตามรหัสอ้างอิง) ด้วยตะขอหลังการคอมไพล์ git


ไม่พบวิธีการเรียงลำดับตามปี :-(
fccoelho

4

ผู้จัดการอ้างอิงjabrefดูเหมือนจะมีตัวเลือกดังกล่าวในการตั้งค่า (ดูส่วนเรียงลำดับในหน้าไฟล์) นอกจากนี้ยังมีคุณสมบัติที่น่าสนใจมากมาย:

ป้อนคำอธิบายรูปภาพที่นี่


ตัวเลือกนี้ถูกลบใน jabref รุ่นล่าสุดมากกว่า
fccoelho

ไม่เลย มันถูกย้ายจากเมนู "ไฟล์" เป็น "ส่งออกเรียงลำดับ" และมีเกณฑ์การเรียงลำดับให้มากขึ้นในตอนนี้
ZoltánCsáti

4

ฉันมีปัญหาเดียวกันตรงไปที่เครื่องมือที่ฉันเลือกใช้ git และ Mendeley บน linux

'โซลูชัน' ของฉันย่อยเมื่อเทียบกับสคริปต์บรรทัดคำสั่ง แต่อย่างไรก็ตามมันทำให้ฉันมีความสุขดังนั้นนี่คือ:

(ฉันยังใช้ emac อยู่แล้ว) สิ่งที่ฉันทำคือเปิดสำเนาของไฟล์ bibtex ใน emacs หลังจากที่ฉันทำงานใน Mendeley แล้วฉันก็เรียกใช้

M-x bibtex-sort-buffer

ใน emacs บันทึกผลลัพธ์และส่งผลลัพธ์ที่เรียงลำดับไปยัง git

เห็นได้ชัดว่าโหมด bibtex เป็นมาตรฐานใน emacs เพราะฉันไม่ต้องติดตั้งอะไรเลยและ emacs ก็จำ '.bib' ของฉันเป็นไฟล์ bibtex โดยอัตโนมัติ


1

ฉันก็มีปัญหานี้ซึ่งยังไม่ได้รับการแก้ไขใน Mendeley จากคำแนะนำที่ยอดเยี่ยมของ que que ฉันได้แก้ไขปัญหาของฉันโดยใช้ emacs แต่ในโหมดแบตช์ช่วยให้ฉันห่อคำตอบในเชลล์สคริปต์ได้เป็นอย่างดี

ก่อนอื่นฉันสร้างสคริปต์ lisp emacs ต่อไปนี้ (เรียกมันว่า bibsort.el):

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

นี่จะเรียงลำดับไฟล์ bibtex ใด ๆ ด้วยชื่อคีย์แล้วบันทึก คุณสามารถเรียกใช้สคริปต์ในโหมดแบตช์จากบรรทัดคำสั่ง ฉันไปเขียนเชลล์สคริปต์เพิ่มเติมเพื่อเรียกใช้สำหรับแต่ละไฟล์ bibtex ที่ Mendeley ได้สั่งใหม่ (โดยมีหรือไม่มีการอ้างอิงใหม่) โดยตรวจสอบรหัสส่งคืนจาก "git diff filename " (ซึ่งช่วยประหยัดเวลาโดยไม่ต้องใช้รหัส lisp โดยไม่จำเป็น ไฟล์ที่ไม่เปลี่ยนแปลง)

นี่คือเชลล์สคริปต์ (ลองเรียกมันว่า bibsort.sh) ซึ่งสมมติว่าทั้งไฟล์ bibtex และ lisp script อยู่ในไดเรกทอรีปัจจุบัน:

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

เพียงแค่เรียกใช้ (หลังจากตั้งค่าสิทธิ์ไฟล์หากจำเป็น) ก่อนที่คอมไพล์แต่ละคอมมิตจะยอมรับ:

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

มันจะไม่แตะบรรทัดที่ไม่ใช่ bibtex พิเศษที่เพิ่มโดย Mendeley และควรทำงานกับการติดตั้ง Unix / Linux ด้วย emacs นอกจากนี้ยังทำงานบนคอนโซล GIT ใน Windows (ซึ่งฉันใช้อยู่) แต่คุณจะต้องติดตั้ง MINGW build ของ emacs แยกจากกัน

สำหรับฉันตอนนี้คอมไพล์ทำงานได้อย่างหรูหราและประหยัด หวังว่านี่จะช่วย ...


ไม่จำเป็นต้องสร้างbibsortฟังก์ชั่นแยกต่างหากemacs Bibliography.bib --batch -f bibtex-sort-buffer -f save-bufferก็ทำได้เช่นกัน
Dean Serenevy

0

emacs (และ xemacs) มีส่วนเสริมที่เรียกว่าAUCTeXซึ่ง (ในกลุ่มอื่น ๆ (La) ทางลัดที่เกี่ยวข้องกับคีย์เบดและผู้ช่วย) TeX มีโหมดพิเศษสำหรับ BibTeX รวมถึงการเรียงลำดับ.bibไฟล์ตามคีย์


0

หากคุณต้องการที่จะเรียกใช้คำสั่งในแต่ละครั้งที่กระทำจะทำอาจจะเป็นคอมไพล์post-commitช่วยเหลือเบ็ดกระป๋อง (ดูตัวอย่างคำอธิบายในหนังสือคอมไพล์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.