Я работаю с LaTeX и занимаюсь версионированием с Git. Для управления библиографией я использую Mendeley.
Проблема в том, что каждый раз, когда Mendeley синхронизирует .bib
экспорт, они располагаются в другом порядке, что делает библиографическое управление версиями намного сложнее.
Моя идея состоит в том, чтобы сортировать записи BibTex в .bib
файле, каждый раз перед фиксацией.
Не могли бы вы помочь мне, как сделать это умным (коротким и сладким) способом? :)
PS Я могу запустить эту процедуру вручную. Мне не нужна интеграция с Git. Я просто хочу, чтобы программа / скрипт сортировал .bib
файл.
text-processing
git
sort
latex
Гжегож Вежовецкий
источник
источник
Ответы:
Как насчет
bibsort
?Это сценарий оболочки обертывание
nawk
(иtr
,sort
иgrep
) и включает в себя два предупреждения , которые , возможно , придется обратить внимание на (см источника).( Редактировать Там также много связанных с bibtex модулей Perl ...)
Edit2 Я только что узнал, что вы хотите отсортировать по любому ключу, хотя,
bibsort
видимо, сортирует только по тегам bibtex - но, возможно, его источник (он не слишком длинный) все еще полезен ...?источник
Вы можете использовать
bibtool
(-s
опция - сортировка по ссылочному ключу) с помощью ловушки git post-commit.источник
У менеджера ссылок,
jabref
похоже, есть такая опция в настройках (см. Раздел «Порядок сортировки» на странице «Файл»). У этого также есть много интересных особенностей:источник
У меня была точно такая же проблема, вплоть до моего выбора инструментов: использование git и Mendeley в Linux.
Мое «решение» не соответствует требованиям сценария командной строки, но тем не менее оно меня порадовало, так что вот оно:
(я также уже использовал emacs, поэтому) я делаю, открывая копию файла bibtex в emacs после того, как я выполняю какую-либо работу в Mendeley, затем я запускаю
в emacs сохраните результаты и передайте эти отсортированные результаты в git.
Очевидно, bibtex-mode является стандартным в emacs, потому что мне не нужно было ничего устанавливать, и emacs автоматически распознал мой '.bib' как файл bibtex.
источник
У меня тоже была эта проблема, которая до сих пор не решена в Mendeley. Основываясь на замечательном предложении очереди, я решил свою проблему с помощью emacs, но в пакетном режиме, что позволило мне обернуть решение в сценарий оболочки.
Во-первых, я создал следующий скрипт lisp для emacs (назовем его bibsort.el):
Это сортирует любой файл bibtex по имени ключа и затем сохраняет его. Вы можете вызвать скрипт в пакетном режиме из командной строки. Я пошел дальше в написании сценария оболочки, чтобы вызывать его для каждого файла bibtex, который Менделей переупорядочил (с новыми ссылками или без них), проверив код возврата из «git diff filename » (это экономит время, не выполняя ненужный код lisp в файлы, которые не изменились).
Вот сценарий оболочки (давайте предположительно назовем его bibsort.sh), который предполагает, что и файлы bibtex, и сценарий lisp находятся в текущем каталоге:
Просто запустите его (после установки прав доступа к файлам при необходимости) перед каждым git commit:
Он не будет касаться дополнительных не-bibtex строк, добавленных Mendeley, и должен работать на любой установке Unix / Linux с emacs. Он также работает на консоли GIT в Windows (которую я использую), но вам придется установить сборку MINGW для emacs отдельно.
Для меня git commits теперь работает элегантно и экономно. Надеюсь это поможет ...
источник
bibsort
функцию,emacs Bibliography.bib --batch -f bibtex-sort-buffer -f save-buffer
тоже буду это делать.emacs (и xemacs) имеют надстройку под названием AUCTeX , которая (среди других (La) сочетаний клавиш и помощников, связанных с TeX) имеет специальный режим для BibTeX, включая сортировку
.bib
файлов по ключу.источник
Если вы хотите запускать команду каждый раз, когда выполняется коммит, возможно, подойдет
post-commit
ловушка git (см., Например, описание в книге git .источник