;;; natbib.el --- Style hook for the NatBib package ;;; ;;; AUTHOR: Carsten Dominik ;;; building on older code from Berwin Turlach ;;; Code: (TeX-add-style-hook "natbib" (function (lambda () ;; The number in the cdr of the following list indicates how many ;; optional note arguments we consider useful. Prompting for those ;; arguments will still depend upon `TeX-arg-cite-note-p'. (let ((citecmds '(("cite" . 0) ("citet" . 1) ("citet*" . 1) ("citealt" . 1) ("citealt*" . 1) ("citep" . 2) ("citep*" . 2) ("citealp" . 2) ("citealp*" . 2) ("citeauthor" . 0) ("citeauthor*" . 0) ("citefullauthor" . 0) ("citeyear" . 0) ("citeyearpar" . 0) ("shortcites" . 0)))) ;; Add these symbols (apply 'TeX-add-symbols (mapcar (lambda (cmd) (cond ((= (cdr cmd) 0) ;; No optional arguments (list (car cmd) 'TeX-arg-cite)) ((= (cdr cmd) 1) ;; Just one optional argument, the post note (list (car cmd) '(TeX-arg-conditional TeX-arg-cite-note-p (["Post-note"]) nil) 'TeX-arg-cite)) ((= (cdr cmd) 2) ;; Pre and post notes (list (car cmd) '(TeX-arg-conditional TeX-arg-cite-note-p (natbib-note-args) nil) 'TeX-arg-cite)))) citecmds)) ;; Add the other symbols (TeX-add-symbols '("citetext" "Text") '("bibpunct" ["Post note separator"] "Opening bracket" "Closing bracket" "style [n]umeric [s]uperscript [a]uthor-year" "Punctuation between author and year" "Punctuation between years for common authors") '("citestyle" "Style") '("citeindextrue") '("citeindexfalse") '("citeindextype")) ;; Make an entry in TeX-complete-list (add-to-list 'TeX-complete-list (list (concat "\\\\\\(" (mapconcat (lambda (x) (regexp-quote (car x))) citecmds "\\|") "\\)\\(\\[[^]\n\r\\%]*\\]\\)*{\\([^{}\n\r\\%,]*,\\)*\\([^{}\n\r\\%,]*\\)") 4 'LaTeX-bibitem-list "}"))) ;; Tell RefTeX (if (fboundp 'reftex-set-cite-format) (reftex-set-cite-format 'natbib))))) (defun natbib-note-args (optional &optional prompt definition) "Prompt for two note arguments a natbib citation command." (if TeX-arg-cite-note-p (let* ((pre (read-string (TeX-argument-prompt optional optional "Pre-note"))) (post (read-string (TeX-argument-prompt optional optional "Post-note")))) (if (not (string= pre "")) (insert "[" pre "]")) (if (not (string= post "")) (insert "[" post "]") ;; Make sure that we have an empty post note if pre is not empty (if (string= pre "") (insert "[]")))))) ;; natbib.el ends here