diff --git a/style/natbib.el b/style/natbib.el index d56642c..7887ad8 100644 --- a/style/natbib.el +++ b/style/natbib.el @@ -1,6 +1,6 @@ -;;; natbib.el --- Style hook for the natbib package +;;; natbib.el --- AUCTeX style for `natbib.sty' version 8.31b -;; Copyright (C) 1997, 1998, 2004, 2007, 2014 Free Software Foundation, Inc. +;; Copyright (C) 1997, 1998, 2004, 2007, 2014, 2016 Free Software Foundation, Inc. ;; Authors: Berwin Turlach ;; Carsten Dominik @@ -26,86 +26,132 @@ ;;; 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 ([LaTeX-arg-natbib-notes]) 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)))) +(TeX-add-style-hook + "natbib" + (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) + ;; 2.4 Extended Citation Commands + ("citenum" . 0) + ;; 2.5 Forcing Upper Cased Name + ("Citet" . 1) ("Citet*" . 1) ("Citealt" . 1) ("Citealt*" . 1) + ("Citep" . 2) ("Citep*" . 2) ("Citealp" . 2) ("Citealp*" . 2) + ;; 2.6 Citation Aliasing + ("citetalias" . 1) ("citepalias" . 2)))) + + ;; 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 ([LaTeX-arg-natbib-notes]) 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" (TeX-arg-eval completing-read + (TeX-argument-prompt optional nil "Style") + '("plain" "plainnat" "agu" "egu" + "agms" "dcu" "kluwer" "cospar" "nature"))) + '("citeindextrue") + '("citeindexfalse") + '("citeindextype") + '("defcitealias" TeX-arg-cite "Alias") + '("setcitestyle" (TeX-arg-key-val + (;; Citation mode (fourth argument of \bibpunct): + ("authoryear") ("numbers") ("super") + ;; Braces (first and second arguments of \bibpunct): + ("round") ("square") ("open") ("close") + ;; Between citations (third argument of \bibpunct): + ("semicolon") ("comma") ("citesep") + ;; Between author and year (fifth argument of \bibpunct): + ("aysep") + ;; Between years with common author (sixth argument of \bibpunct): + ("yysep") + ;; Text before post-note (optional argument of \bibpunct): + ("notesep"))))) + + ;; 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 "}"))) + + ;; 2.12 Other Formatting Options + (TeX-add-symbols + "bibsection" + "bibpreamble" + "bibfont" + "citenumfont" + "bibnumfmt") + (LaTeX-add-lengths "bibhang" "bibsep") + + ;; 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" "{") + ("citenum" "{") + ("Citet" "*[[{") + ("Citealt" "*[[{") + ("Citep" "*[[{") + ("Citealp" "*[[{") + ("Citeauthor" "*[[{") + ("citetalias" "*[[{") + ("citepalias" "*[[{")) + 'reference) + (font-latex-add-keywords '(("defcitealias" "{{") + ("bibpunct" "[{{{{{{") + ("setcitestyle" "{") + ("citestyle" "{")) + 'function)) + + ;; Tell RefTeX + (if (fboundp 'reftex-set-cite-format) + (reftex-set-cite-format 'natbib))) LaTeX-dialect) (defun LaTeX-arg-natbib-notes (optional)