--- /dev/null
+;;; natbib.el --- Style hook for the NatBib package
+;;;
+;;; AUTHOR: Carsten Dominik <dominik@strw.leidenuniv.nl>
+;;; 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"
+ "Punctuation between multiple citations"
+ "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 "}")))
+
+ ;; Fontification
+ (when (and (fboundp 'font-latex-add-keywords)
+ (eq TeX-install-font-lock 'font-latex-setup))
+ (font-latex-add-keywords '(("cite" "*[[{")
+ ("citet" "*[[{")
+ ("citealt" "*[[{")
+ ("citep" "*[[{")
+ ("citealp" "*[[{")
+ ("citeauthor" "*[[{")
+ ("citefullauthor" "[[{")
+ ("citeyear" "[[{")
+ ("citeyearpar" "[[{")
+ ("shortcites" "{"))
+ 'reference))
+
+ ;; 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 "[]"))))))
+
+(defvar LaTeX-natbib-package-options '("numbers" "super" "authoryear"
+ "round" "square" "angle" "curly"
+ "comma" "colon" "nobibstyle"
+ "bibstyle" "openbib" "sectionbib"
+ "sort" "sort&compress"
+ "longnamesfirst" "nonamebreak")
+ "Package options for the natbib package.")
+
+;; natbib.el ends here