Ich arbeite mit LaTeX und versioniere mit Git. Für die Literaturverwaltung verwende ich Mendeley.
Das Problem ist, dass Mendeley seine .bib
Exporte jedes Mal in einer anderen Reihenfolge synchronisiert , was die Versionierung von Bibliografien erheblich erschwert.
Meine Idee ist, BibTex-Einträge .bib
jedes Mal vor dem Festschreiben in einer Datei zu sortieren .
Könntest du mir helfen, wie das auf kluge (kurze & süße) Weise geht? :)
PS Ich kann diese Routine manuell ausführen. Ich brauche keine Git-Integration. Ich möchte nur, dass das Programm / Skript die .bib
Datei sortiert .
text-processing
git
sort
latex
Grzegorz Wierzowiecki
quelle
quelle
Antworten:
Wie wäre es
bibsort
?Es ist eine Shell - Skript Verpackung
nawk
(undtr
,sort
undgrep
) und enthält zwei Warnungen Sie achten auf (siehe Quelle) haben könnten.( Edit Es gibt auch viele bibtex-bezogene Perl-Module ...)
Edit2 Ich habe gerade erkannt, dass Sie nach jedem Schlüssel sortieren möchten , während Sie
bibsort
anscheinend nur nach den bibtex-Tags sortieren - aber vielleicht ist die Quelle (die nicht zu lang ist) immer noch hilfreich ...?quelle
Sie können
bibtool
(-s
Option - Sortieren nach dem Referenzschlüssel) mit dem Git-Post-Commit-Hook verwenden.quelle
Der Referenzmanager
jabref
scheint eine solche Option in den Voreinstellungen zu haben (siehe Abschnitt Sortierreihenfolge auf der Seite Datei). Es hat auch viele interessante Funktionen:quelle
Ich hatte genau das gleiche Problem, bis auf meine Wahl der Tools: Mit Git und Mendeley unter Linux.
Meine "Lösung" ist im Vergleich zu einem Befehlszeilenskript unterdurchschnittlich, hat mich aber trotzdem glücklich gemacht.
(Ich habe auch schon Emacs benutzt, also) Ich öffne eine Kopie der Bibtex-Datei in Emacs, nachdem ich in Mendeley gearbeitet habe, und starte dann
Speichern Sie in Emacs die Ergebnisse und übertragen Sie diese sortierten Ergebnisse in Git.
Anscheinend ist der Bibtex-Modus in Emacs Standard, da ich nichts installieren musste und Emacs mein '.bib' automatisch als Bibtex-Datei erkannt hat.
quelle
Auch ich hatte dieses Problem, das in Mendeley immer noch nicht behoben ist. Basierend auf dem großartigen Vorschlag von que que habe ich mein Problem mit Emacs gelöst, aber im Batch-Modus, sodass ich die Lösung in ein Shell-Skript einbinden konnte.
Zuerst habe ich das folgende Emacs-Lisp-Skript erstellt (nennen wir es bibsort.el):
Dadurch werden alle bibtex-Dateien nach Schlüsselnamen sortiert und dann gespeichert. Sie können das Skript im Batch-Modus über die Befehlszeile aufrufen. Ich habe ein Shell-Skript geschrieben, um es für jede von Mendeley neu geordnete Bibtex-Datei (mit oder ohne neue Referenzen) aufzurufen, indem ich den Rückkehrcode von "git diff filename " überprüfte (dies spart Zeit, indem ich den Lisp-Code nicht unnötig ausführte) Dateien, die sich nicht geändert haben).
Hier ist das Shell-Skript (nennen wir es einfallsreich bibsort.sh), das davon ausgeht, dass sich sowohl die bibtex-Dateien als auch das lisp-Skript im aktuellen Verzeichnis befinden:
Führen Sie es einfach vor jedem Git-Commit aus (nach dem Festlegen der Dateiberechtigungen, falls erforderlich):
Es wird die von Mendeley hinzugefügten zusätzlichen Nicht-Bibtex-Zeilen nicht berühren und sollte auf jeder Unix / Linux-Installation mit Emacs funktionieren. Es funktioniert auch auf der GIT-Konsole in Windows (die ich verwende), aber Sie müssten den MINGW-Build von Emacs separat installieren.
Git commit arbeitet für mich jetzt elegant und wirtschaftlich. Hoffe das hilft ...
quelle
bibsort
Funktion zu erstellen ,emacs Bibliography.bib --batch -f bibtex-sort-buffer -f save-buffer
dies wird auch durchgeführt.emacs (und xemacs) haben ein Add-On namens AUCTeX , das (neben anderen (La) TeX-bezogenen Tastaturkürzeln und -Hilfen) einen speziellen Modus für BibTeX hat, einschließlich des Sortierens von
.bib
Dateien nach dem Schlüssel.quelle
Wenn Sie bei jedem Commit einen Befehl ausführen möchten,
post-commit
hilft möglicherweise der Git- Hook (siehe z. B. die Beschreibung im Git-Buch) .quelle