Як сортувати (за будь-яким ключем) записи BibTex у файлі `.bib`?


13

Я працюю з LaTeX і роблю версії з Git. Для управління бібліографією я використовую Менделі.

Проблема полягає в тому, що щоразу, коли Mendeley синхронізує .bibекспорт, вони відбуваються в іншому порядку, що робить версію бібліографії набагато складнішою.

Моя ідея полягає в тому, щоб сортувати записи BibTex у .bibфайл, кожен раз перед фіксацією.

Чи можете ви мені допомогти, як це зробити розумним (коротким та солодким) способом? :)

PS Я можу запустити цю процедуру вручну. Мені не потрібна інтеграція git. Я просто хочу, щоб програма / сценарій сортували .bibфайл.


4
Цей питання може мати кращу аудиторію на сайті TeX - LaTeX StackExchange.
Стефан Гіменез

Не впевнений, куди це належить (StackOverflow для питання програмування, як зробити сортування, або (La) TeX для проблеми в цілому), але я не бачу нічого, що б це питання стосувало * nix.
me_and

1
@me_and Він, здається, шукає інструмент Linux або простий скрипт оболонки, щоб сортувати записи BibTeX, тож, напевно, тут добре
Майкл Мрозек

Відповіді:


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.

Це обгортання сценарію оболонкиnawktr, sortі grep) і включає два попередження, на які, можливо, доведеться звернути увагу (див. Джерело).

( Редагувати Також є багато Perl-модулів, що стосуються бібтексту ...)

Edit2 Я щойно визнав, що ви хочете сортувати за будь-яким ключем, але, bibsortмабуть, впорядковує лише теги bibtex - але, можливо, його джерело (це не занадто довго) все ще корисно ...?


7

Ви можете використовувати bibtool( -sопція - сортувати за посилальним ключем) за допомогою гака, що перебуває після фіксації.


Не знайшли спосіб сортування за роками :-(
fccoelho

4

jabrefЗдається, у довідковому менеджері така опція є в налаштуваннях (див. Розділ Сортування порядку на сторінці файлів). Він також має багато цікавих особливостей:

введіть тут опис зображення


Ця опція була вилучена в останніх версіях jabref
fccoelho

Ні, ні. Він був переведений з "Файл" у меню "Експорт сортування". І більше критеріїв сортування доступні зараз.
Zoltán Csáti

4

У мене була точно така ж проблема, аж до мого вибору інструментів: використання git та Mendeley на Linux.

Моє "рішення" є підпунктним порівняно зі сценарієм командного рядка, але, тим не менш, мене це зраділо, тому ось це:

(я також вже використовував emacs, тому), що я роблю, це відкрити копію файлу bibtex в emacs після того, як я виконую будь-яку роботу в Менделлі, тоді я запускаю

M-x bibtex-sort-buffer

в Emacs збережіть результати та покладіть ці відсортовані результати на git.

Мабуть, режим bibtex є стандартним для emacs, тому що мені нічого не потрібно було встановлювати, і emacs автоматично розпізнавав мій ".bib" як файл bibtex.


1

У мене теж була ця проблема, яка досі не виправлена ​​в Менделлі. Виходячи з чудової пропозиції que que, я вирішив свою проблему за допомогою emacs, але в пакетному режимі, що дозволило мені обернути рішення в сценарій оболонки.

По-перше, я створив такий сценарій lisp emacs (назвемо це bibsort.el):

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

Це сортує будь-який файл bibtex за назвою ключа, а потім зберігає його. Ви можете викликати скрипт у пакетному режимі з командного рядка. Я пішов далі, написавши сценарій оболонки, щоб викликати його для кожного файлу bibtex, який Менделі переупорядкував (зі свіжими посиланнями чи без них), перевіривши код повернення від "git diff filename " (це економить час, не запускаючи код lisp без потреби файли, які не змінилися).

Ось сценарій оболонки (давайте уявно назвемо це bibsort.sh), який передбачає, що і файли bibtex, і сценарій lisp знаходяться в поточному каталозі:

#!/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, і повинен працювати на будь-якій установці Unix / Linux з emacs. Він також працює на консолі GIT у Windows (яку я використовую), але вам доведеться встановлювати збірку MINGW emacs окремо.

Для мене, git commints зараз працюють вишукано та економно. Сподіваюся, це допомагає ...


Не потрібно створювати окрему bibsortфункцію, emacs Bibliography.bib --batch -f bibtex-sort-buffer -f save-bufferце також буде робити.
Дін Сереневий


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.