unix-conf/.emacs.d/elpa/auctex-11.89.1/style/natbib.el
2016-02-18 14:53:30 +01:00

133 lines
4.3 KiB
EmacsLisp

;;; natbib.el --- Style hook for the natbib package
;; Copyright (C) 1997, 1998, 2004, 2007, 2014 Free Software Foundation, Inc.
;; Authors: Berwin Turlach <statba@nus.edu.sg>
;; Carsten Dominik <dominik@strw.leidenuniv.nl>
;; Maintainer: auctex-devel@gnu.org
;; Keywords: tex
;; This file is part of AUCTeX.
;; AUCTeX is free software; you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;; AUCTeX is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with AUCTeX; see the file COPYING. If not, write to the Free
;; Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
;; 02110-1301, USA.
;;; 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))))
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 (TeX-read-string
(TeX-argument-prompt optional optional "Pre-note")))
(post (TeX-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