AUCTeX Sync -- Updated Style Files.
[packages] / xemacs-packages / auctex / style / natbib.el
index 522656c..f0664fd 100644 (file)
@@ -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 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 1998, 2004, 2007, 2014, 2016 Free Software Foundation, Inc.
 
 ;; Authors: Berwin Turlach <statba@nus.edu.sg>
 ;;          Carsten Dominik <dominik@strw.leidenuniv.nl>
 
 ;;; 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))))
+(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))
+
+     ;; 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 "}")))
+
+   ;; Add the other symbols
+   (TeX-add-symbols
+    ;; 2.4 Extended Citation Commands
+    '("citetext" "Text")
+
+    ;; 2.6 Citation Aliasing
+    '("defcitealias" TeX-arg-cite "Alias")
+
+    ;; 2.9 Selecting Citation Punctuation
+    '("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"))))
+    '("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")))
+
+    ;; 2.12 Other Formatting Options
+    "bibsection"
+    "bibpreamble"
+    "bibfont"
+    "citenumfont"
+    "bibnumfmt"
+
+    ;; 2.13 Automatic Indexing of Citations
+    '("citeindextrue")
+    '("citeindexfalse")
+    '("citeindextype"))
+
+   ;; 2.12 Other Formatting Options
+   (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
+   (when (and LaTeX-reftex-cite-format-auto-activate
+             (fboundp 'reftex-set-cite-format))
+     (reftex-set-cite-format 'natbib)))
  LaTeX-dialect)
 
-(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 "[]"))))))
+(defun LaTeX-arg-natbib-notes (optional)
+  "Prompt for two note arguments a natbib citation command.
+If OPTIONAL is non-nil, insert them in brackets, otherwise in
+braces."
+  (let ((pre (TeX-read-string
+             (TeX-argument-prompt optional nil "Pre-note")))
+       (post (TeX-read-string
+              (TeX-argument-prompt optional nil "Post-note"))))
+    (TeX-argument-insert pre optional)
+    (TeX-argument-insert post optional)
+    ;; pre is given, post is empty: Make sure that we insert an
+    ;; extra pair of `[]', otherwise pre becomes post
+    (when (and pre (not (string= pre ""))
+              (string= post ""))
+      (insert LaTeX-optop LaTeX-optcl))))
 
 (defvar LaTeX-natbib-package-options '("numbers" "super" "authoryear"
                                       "round" "square" "angle" "curly"
-                                      "comma" "colon" "nobibstyle" 
+                                      "comma" "colon" "nobibstyle"
                                       "bibstyle" "openbib" "sectionbib"
                                       "sort" "sort&compress"
                                       "longnamesfirst" "nonamebreak")