1 ;;; reftex-auc.el --- RefTeX's interface to AUC TeX
2 ;; Copyright (c) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
4 ;; Author: Carsten Dominik <dominik@strw.LeidenUniv.nl>
7 ;; This file is part of GNU Emacs.
9 ;; GNU Emacs is free software; you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation; either version 2, or (at your option)
14 ;; GNU Emacs is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ;; GNU General Public License for more details.
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with GNU Emacs; see the file COPYING. If not, write to the
21 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
22 ;; Boston, MA 02111-1307, USA.
28 (eval-when-compile (require 'cl
))
33 (defun reftex-plug-flag (which)
34 ;; Tell if a certain flag is set in reftex-plug-into-AUCTeX
35 (or (eq t reftex-plug-into-AUCTeX
)
36 (and (listp reftex-plug-into-AUCTeX
)
37 (nth which reftex-plug-into-AUCTeX
))))
39 (defun reftex-arg-label (optional &optional prompt definition
)
40 "Use `reftex-label', `reftex-reference' or AUCTeX's code to insert label arg.
41 What is being used depends upon `reftex-plug-into-AUCTeX'."
44 ((and definition
(reftex-plug-flag 1))
45 ;; Create a new label, with a temporary brace for `reftex-what-macro'
47 (progn (insert "{") (setq label
(or (reftex-label nil t
) "")))
48 (delete-backward-char 1)))
49 ((and (not definition
) (reftex-plug-flag 2))
50 ;; Reference a label with RefTeX
51 (setq label
(reftex-reference nil t
)))
53 ;; AUCTeX's default mechanism
54 (setq label
(completing-read (TeX-argument-prompt optional prompt
"Key")
55 (LaTeX-label-list)))))
56 (if (and definition
(not (string-equal "" label
)))
57 (LaTeX-add-labels label
))
58 (TeX-argument-insert label optional
)))
60 (defun reftex-arg-cite (optional &optional prompt definition
)
61 "Use `reftex-citation' or AUCTeX's code to insert a cite-key macro argument.
62 What is being used depends upon `reftex-plug-into-AUCTeX'."
65 ((and (not definition
) (reftex-plug-flag 3))
66 (setq items
(list (or (reftex-citation t
) ""))))
68 (setq prompt
(concat (if optional
"(Optional) " "")
69 (if prompt prompt
"Add key")
71 (setq items
(multi-prompt "," t prompt
(LaTeX-bibitem-list)))))
72 (apply 'LaTeX-add-bibitems items
)
73 (TeX-argument-insert (mapconcat 'identity items
",") optional
)))
76 (defun reftex-arg-index-tag (optional &optional prompt
&rest args
)
77 "Prompt for an index tag with completion.
78 This is the name of an index, not the entry."
80 (setq prompt
(concat (if optional
"(Optional) " "")
81 (if prompt prompt
"Index tag")
83 (if (and reftex-support-index
(reftex-plug-flag 4))
84 ;; Use RefTeX completion
86 (reftex-access-scan-info nil
)
88 (cdr (assoc 'index-tags
89 (symbol-value reftex-docstruct-symbol
)))
90 tag
(completing-read prompt
(mapcar 'list taglist
))))
91 ;; Just ask like AUCTeX does.
92 (setq tag
(read-string prompt
)))
93 (TeX-argument-insert tag optional
)))
95 (defun reftex-arg-index (optional &optional prompt
&rest args
)
96 "Prompt for an index entry completing with known entries.
97 Completion is specific for just one index, if the macro or a tag
98 argument identify one of multiple indices."
100 (if (and reftex-support-index
(reftex-plug-flag 4))
102 (reftex-access-scan-info nil
)
103 (setq tag
(reftex-what-index-tag)
104 key
(reftex-index-complete-key (or tag
"idx"))))
105 (setq key
(completing-read (TeX-argument-prompt optional prompt
"Key")
106 (LaTeX-index-entry-list))))
107 (unless (string-equal "" key
)
108 (LaTeX-add-index-entries key
))
109 (TeX-argument-insert key optional
)))
111 (defun reftex-what-index-tag ()
112 ;; Look backward to find out what index the macro at point belongs to
113 (let ((macro (save-excursion
114 (and (re-search-backward "\\\\[a-zA-Z*]+" nil t
)
118 (setq entry
(assoc macro reftex-index-macro-alist
)))
119 (setq tag
(nth 1 entry
))
124 (goto-char (match-end 1))
125 (or (reftex-nth-arg tag
(nth 6 entry
)) "idx")))
128 (defvar LaTeX-label-function
)
129 (defun reftex-plug-into-AUCTeX ()
130 ;; Replace AUCTeX functions with RefTeX functions.
131 ;; Which functions are replaced is controlled by the variable
132 ;; `reftex-plug-into-AUCTeX'.
134 (if (reftex-plug-flag 0)
135 (setq LaTeX-label-function
'reftex-label
)
136 (setq LaTeX-label-function nil
))
138 (and (or (reftex-plug-flag 1) (reftex-plug-flag 2))
139 (fboundp 'TeX-arg-label
)
140 (fset 'TeX-arg-label
'reftex-arg-label
))
142 (and (reftex-plug-flag 3)
143 (fboundp 'TeX-arg-cite
)
144 (fset 'TeX-arg-cite
'reftex-arg-cite
))
146 (and (reftex-plug-flag 4)
147 (fboundp 'TeX-arg-index-tag
)
148 (fset 'TeX-arg-index-tag
'reftex-arg-index-tag
))
149 (and (reftex-plug-flag 4)
150 (fboundp 'TeX-arg-index
)
151 (fset 'TeX-arg-index
'reftex-arg-index
)))
153 (defun reftex-toggle-plug-into-AUCTeX ()
154 "Toggle Interface between AUCTeX and RefTeX on and off."
156 (unless (and (featurep 'tex-site
) (featurep 'latex
))
157 (error "AUCTeX's LaTeX mode does not seem to be loaded"))
158 (setq reftex-plug-into-AUCTeX
(not reftex-plug-into-AUCTeX
))
159 (reftex-plug-into-AUCTeX)
160 (if reftex-plug-into-AUCTeX
161 (message "RefTeX has been plugged into AUCTeX.")
162 (message "RefTeX no longer interacts with AUCTeX.")))
164 (defun reftex-add-label-environments (entry-list)
165 "Add label environment descriptions to `reftex-label-alist-style'.
166 The format of ENTRY-LIST is exactly like `reftex-label-alist'. See there
168 This function makes it possible to support RefTeX from AUCTeX style files.
169 The entries in ENTRY-LIST will be processed after the user settings in
170 `reftex-label-alist', and before the defaults (specified in
171 `reftex-default-label-alist-entries'). Any changes made to
172 `reftex-label-alist-style' will raise a flag to the effect that
173 the label information is recompiled on next use."
174 (unless reftex-docstruct-symbol
175 (reftex-tie-multifile-symbols))
176 (when (and reftex-docstruct-symbol
177 (symbolp reftex-docstruct-symbol
))
178 (let ((list (get reftex-docstruct-symbol
'reftex-label-alist-style
))
181 (setq entry
(pop entry-list
))
182 (unless (member entry list
)
183 (setq reftex-tables-dirty t
187 (put reftex-docstruct-symbol
'reftex-label-alist-style list
)))))
188 (defalias 'reftex-add-to-label-alist
'reftex-add-label-environments
)
190 (defun reftex-add-section-levels (entry-list)
191 "Add entries to the value of `reftex-section-levels'.
192 The added values are kept local to the current document. The format
193 of ENTRY-LIST is a list of cons cells (\"MACRONAME\" . LEVEL). See
194 `reftex-section-levels' for an example."
195 (unless reftex-docstruct-symbol
196 (reftex-tie-multifile-symbols))
197 (when (and reftex-docstruct-symbol
198 (symbolp reftex-docstruct-symbol
))
199 (let ((list (get reftex-docstruct-symbol
'reftex-section-levels
))
202 (setq entry
(pop entry-list
))
203 (unless (member entry list
)
204 (setq reftex-tables-dirty t
208 (put reftex-docstruct-symbol
'reftex-section-levels list
)))))
210 (defun reftex-notice-new-section ()
211 (reftex-notice-new 1 'force
))
213 ;;; reftex-auc.el ends here