bibliography: citar + biblio + org-cite CSL setup

- init.el: biblio module with +citar flag
- packages.el: citeproc for org-cite CSL export
- config.el: citar (browse/insert/notes), biblio (online search),
  org-cite with CSL processor, bibtex editing defaults
- Keybindings under SPC b: browse, insert, notes, search online
- Auto-creates ~/org/references.bib if missing
This commit is contained in:
2026-02-25 12:59:19 +01:00
parent 7b1d0ad7e1
commit aacaf2bdbf
3 changed files with 51 additions and 7 deletions

View File

@@ -1807,18 +1807,59 @@ Skip for beamer exports — beamer uses adjustbox on plain tabular."
;;; ============================================================ ;;; ============================================================
;;; BIBTEX / CITAR ;;; BIBLIOGRAPHY — citar + biblio + org-cite
;;; ============================================================ ;;; ============================================================
;; Workflow:
;; 1. SPC b s → search CrossRef/DBLP/arXiv by author/title/DOI
;; 2. In results: select entry → i = insert into references.bib
;; 3. In org file: SPC b i → search your .bib → insert [cite:@key]
;; 4. Export to PDF: citations auto-formatted, bibliography generated
;;
;; Files:
;; ~/org/references.bib — master bibliography (auto-created if missing)
;; ~/org/notes/ — reading notes per reference
;; ~/org/papers/ — PDF library (optional)
(after! citar (after! citar
(setq citar-bibliography '("~/org/references.bib") (setq citar-bibliography '("~/org/references.bib")
citar-notes-paths '("~/org/notes/") citar-notes-paths '("~/org/notes/")
citar-library-paths '("~/org/papers/")) citar-library-paths '("~/org/papers/"))
;; Ensure references.bib exists
(let ((bib (expand-file-name "~/org/references.bib")))
(unless (file-exists-p bib)
(with-temp-file bib (insert "% Bibliography — managed via citar + biblio\n\n")))))
;; org-cite: use CSL processor (no BibLaTeX/BibTeX toolchain needed)
(after! oc
(require 'citeproc)
(setq org-cite-global-bibliography '("~/org/references.bib")
org-cite-export-processors '((latex csl)
(html csl)
(t csl))))
;; biblio.el: search and import references from online databases
(after! biblio
(setq biblio-crossref-user-email-address "martin@sukany.cz"))
;; BibTeX editing defaults
(setq bibtex-dialect 'biblatex
bibtex-autokey-year-length 4
bibtex-autokey-name-year-separator ""
bibtex-autokey-year-title-separator "-"
bibtex-autokey-titleword-length 5
bibtex-autokey-titlewords 3)
(map! :leader (map! :leader
"b b" #'citar-open (:prefix ("b" . "bibliography")
"b i" #'citar-insert-citation :desc "Browse references" "b" #'citar-open
"b n" #'citar-open-notes :desc "Insert citation" "i" #'citar-insert-citation
"b r" #'citar-refresh)) :desc "Open notes for reference" "n" #'citar-open-notes
:desc "Refresh bibliography" "r" #'citar-refresh
:desc "Search online (CrossRef)" "s" #'biblio-crossref-lookup
:desc "Search arXiv" "a" #'biblio-arxiv-lookup
:desc "Search DBLP" "d" #'biblio-dblp-lookup
:desc "Search DOI" "D" #'biblio-doi-insert-bibtex))
;;; ============================================================ ;;; ============================================================

View File

@@ -46,7 +46,7 @@
:tools :tools
ansible ansible
biblio (biblio +citar)
debugger debugger
docker docker
(eval +overlay) (eval +overlay)

View File

@@ -109,6 +109,9 @@
(package! combobulate :recipe (:host github :repo "mickeynp/combobulate")) (package! combobulate :recipe (:host github :repo "mickeynp/combobulate"))
(package! breadcrumb :recipe (:host github :repo "joaotavora/breadcrumb")) (package! breadcrumb :recipe (:host github :repo "joaotavora/breadcrumb"))
;; Bibliography: CSL citation processor for org-cite export
(package! citeproc)
;; Tier 3 — Supplementary ;; Tier 3 — Supplementary
(package! org-anki) (package! org-anki)
(package! org-ql) (package! org-ql)