没人用ebib吗?我之前也用zotero,现在觉得org-ref + ebib就够了。ebib配合pdf-tools、pdf-noter用来管理bibtex和对应的pdf和笔记,org-ref配合helm用来在线和本地搜索ref,并插入。附上我的配置:
(use-package ebib
:general
([f5] 'ebib)
(ebib-multiline-mode-map
"C-c C-c" 'ebib-quit-multiline-buffer-and-save
"C-c C-q" 'ebib-cancel-multiline-buffer
"C-c C-s" 'ebib-save-from-multiline-buffer)
:custom
(bibtex-autokey-name-case-convert-function 'capitalize)
(bibtex-autokey-titlewords 0)
(bibtex-autokey-year-length 4)
(ebib-uniquify-keys t)
(ebib-bibtex-dialect 'biblatex)
(ebib-index-window-size 10)
(ebib-preload-bib-files '("~/Dropbox/Bibliography/references.bib"))
(ebib-notes-use-single-file "~/Dropbox/Bibliography/Notes.org")
(ebib-file-search-dirs '("~/Dropbox/Bibliography/bibtex-pdfs/"))
(ebib-reading-list-file "~/Dropbox/Bibliography/ReadingList.org")
(ebib-keywords-file "~/Dropbox/Bibliography/ebib-keywords.txt")
(ebib-keywords-field-keep-sorted t)
(ebib-keywords-file-save-on-exit 'always)
(ebib-file-associations '(("pdf")) "using Emacs to open pdf")
(ebib-use-timestamp t "recording the time that entries are added")
(ebib-index-columns '(("Entry Key" 20 t)
("Author/Editor" 40 nil)
("Year" 6 t)
("Title" 50 t)))
(ebib-index-default-sort '("timestamp" . descend)))
(use-package org-ref
:general
(z-spc-leader-def "r" 'org-ref-hydra/body)
:pretty-hydra
((:color red :quit-key "q")
("Insert"
(("i" org-ref-helm-insert-cite-link "citation key")
("r" org-ref-helm-insert-ref-link "ref link")
("l" org-ref-helm-insert-label-link "label link"))
"Browse"
(("b" helm-bibtex "bibtex")
("s" crossref-lookup "lookup"))
"Add"
(("a" crossref-add-bibtex-entry "new entry")
("d" doi-add-bibtex-entry "doi"))))
:custom
(bibtex-dialect 'biblatex)
(org-ref-bibliography-notes "~/Dropbox/Bibliography/Notes.org")
(org-ref-default-bibliography '("~/Dropbox/Bibliography/references.bib"))
(org-ref-pdf-directory "~/Dropbox/Bibliography/bibtex-pdfs/")
(org-ref-show-broken-links nil)
(org-ref-default-ref-type "eqref")
(org-ref-default-citation-link "citet")
:config
(require 'org-ref-citeproc)
(defun org-ref-grep-pdf (&optional _candidate)
"Search pdf files of marked CANDIDATEs."
(interactive)
(let ((keys (helm-marked-candidates))
(get-pdf-function org-ref-get-pdf-filename-function))
(helm-do-pdfgrep-1
(-remove (lambda (pdf)
(string= pdf ""))
(mapcar (lambda (key)
(funcall get-pdf-function key))
keys)))))
(helm-add-action-to-source "Grep PDF" 'org-ref-grep-pdf helm-source-bibtex 1)
(setq helm-bibtex-map
(let ((map (make-sparse-keymap)))
(set-keymap-parent map helm-map)
(define-key map (kbd "C-s") (lambda () (interactive)
(helm-run-after-exit 'org-ref-grep-pdf)))
map))
(push `(keymap . ,helm-bibtex-map) helm-source-bibtex))