Function: reftex-all-used-citation-keys
reftex-all-used-citation-keys is a byte-compiled function defined in
reftex-cite.el.gz.
Signature
(reftex-all-used-citation-keys)
Documentation
Return a list of all citation keys used in document.
Source Code
;; Defined in /usr/src/emacs/lisp/textmodes/reftex-cite.el.gz
;;; Global BibTeX file
(defun reftex-all-used-citation-keys ()
"Return a list of all citation keys used in document."
(reftex-access-scan-info)
;; FIXME: multicites macros provided by biblatex
;; are not covered in this function.
(let ((files (reftex-all-document-files))
(re (concat "\\\\"
"\\(?:"
;; biblatex volcite macros take these args:
;; \volcite[prenote]{volume}[pages]{key}
;; so cater for the first 3 args:
(regexp-opt '("volcite" "Volcite"
"pvolcite" "Pvolcite"
"fvolcite" "ftvolcite"
"svolcite" "Svolcite"
"tvolcite" "Tvolcite"
"avolcite" "Avolcite"))
"\\(?:\\[[^]]*\\]\\)?"
"{[^}]*}"
"\\(?:\\[[^]]*\\]\\)?"
"\\|"
;; Other cite macros usually go like:
;; \cite[prenote][postnote]{key}
;; so cater for the optional args:
"\\(?:bibentry\\|[a-zA-Z]*[Cc]ite[a-zA-Z*]*\\)"
"\\(?:\\[[^]]*\\]\\)\\{0,2\\}"
"\\)"
;; Now match the key:
"{\\([^}]+\\)}"))
file keys kk k)
(save-current-buffer
(while (setq file (pop files))
(set-buffer (reftex-get-file-buffer-force file 'mark))
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(while (re-search-forward re nil t)
;; Make sure we're not inside a comment:
(unless (save-match-data
(nth 4 (syntax-ppss)))
(setq kk (match-string-no-properties 1))
(while (string-match "%.*\n?" kk)
(setq kk (replace-match "" t t kk)))
(setq kk (split-string kk "[, \t\r\n]+"))
(while (setq k (pop kk))
(or (member k keys)
(setq keys (cons k keys))))))))))
(reftex-kill-temporary-buffers)
keys))