-;;; reftex.el --- Minor mode for doing \label, \ref, \cite, \index in LaTeX
-;; Copyright (c) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+;;; reftex.el --- minor mode for doing \label, \ref, \cite, \index in LaTeX
+;; Copyright (c) 1997, 1998, 1999, 2000, 2003 Free Software Foundation, Inc.
-;; Author: Carsten Dominik <dominik@strw.LeidenUniv.nl>
-;; Version: 4.10
-;; Keywords: tex
+;; Author: Carsten Dominik <dominik@science.uva.nl>
+;; Version: 4.18
+;; Keywords: tex
;; This file is part of GNU Emacs.
;;---------------------------------------------------------------------------
;;
;;; Commentary:
-;;
+;;
;; RefTeX is a minor mode with distinct support for \ref, \label, \cite,
;; and \index commands in (multi-file) LaTeX documents.
;; - A table of contents provides easy access to any part of a document.
;;
;; Introduction
;; ************
-;;
+;;
;; RefTeX is a specialized package for support of labels, references,
;; citations, and the index in LaTeX. RefTeX wraps itself round 4 LaTeX
;; macros: `\label', `\ref', `\cite', and `\index'. Using these macros
;; time-consuming tasks almost entirely. It also provides functions to
;; display the structure of a document and to move around in this
;; structure quickly.
-;;
+;;
;; *Note Imprint::, for information about who to contact for help, bug
;; reports or suggestions.
-;;
+;;
;; Environment
;; ===========
-;;
+;;
;; RefTeX needs to access all files which are part of a multifile
;; document, and the BibTeX database files requested by the
;; `\bibliography' command. To find these files, RefTeX will require a
;; which are also used by RefTeX. However, on some systems these
;; variables do not contain the full search path. If RefTeX does not work
;; for you because it cannot find some files, read *Note Finding Files::.
-;;
+;;
;; Entering RefTeX Mode
;; ====================
-;;
+;;
;; To turn RefTeX Mode on and off in a particular buffer, use `M-x
;; reftex-mode'. To turn on RefTeX Mode for all LaTeX files, add the
;; following lines to your `.emacs' file:
-;;
+;;
;; (add-hook 'LaTeX-mode-hook 'turn-on-reftex) ; with AUCTeX LaTeX mode
;; (add-hook 'latex-mode-hook 'turn-on-reftex) ; with Emacs latex mode
-;;
+;;
;; RefTeX in a Nutshell
;; ====================
-;;
+;;
;; 1. Table of Contents
;; Typing `C-c =' (`reftex-toc') will show a table of contents of the
;; document. This buffer can display sections, labels and index
;; entries defined in the document. From the buffer, you can jump
;; quickly to every part of your document. Press `?' to get help.
-;;
+;;
;; 2. Labels and References
;; RefTeX helps to create unique labels and to find the correct key
;; for references quickly. It distinguishes labels for different
;; others), and can be configured to recognize any additional labeled
;; environments you have defined yourself (variable
;; `reftex-label-alist').
-;;
+;;
;; * Creating Labels
;; Type `C-c (' (`reftex-label') to insert a label at point.
;; RefTeX will either
;; tables) or
;; - insert a simple label made of a prefix and a number (all
;; other environments)
-;;
+;;
;; Which labels are created how is configurable with the variable
;; `reftex-insert-label-flags'.
-;;
+;;
;; * Referencing Labels
;; To make a reference, type `C-c )' (`reftex-reference'). This
;; shows an outline of the document with all labels of a certain
;; type (figure, equation,...) and some label context.
;; Selecting a label inserts a `\ref{LABEL}' macro into the
;; original buffer.
-;;
+;;
;; 3. Citations
;; Typing `C-c [' (`reftex-citation') will let you specify a regular
;; expression to search in current BibTeX database files (as
;; sorted. The selected article is referenced as `\cite{KEY}' (see
;; the variable `reftex-cite-format' if you want to insert different
;; macros).
-;;
+;;
;; 4. Index Support
;; RefTeX helps to enter index entries. It also compiles all entries
;; into an alphabetically sorted `*Index*' buffer which you can use
;; index macros and can be configured to recognize any additional
;; macros you have defined (`reftex-index-macros'). Multiple indices
;; are supported.
-;;
+;;
;; * Creating Index Entries
;; To index the current selection or the word at point, type
;; `C-c /' (`reftex-index-selection-or-word'). The default macro
;; `reftex-index-default-macro' will be used. For a more
;; complex entry type `C-c <' (`reftex-index'), select any of
;; the index macros and enter the arguments with completion.
-;;
+;;
;; * The Index Phrases File (Delayed Indexing)
;; Type `C-c \' (`reftex-index-phrase-selection-or-word') to add
;; the current word or selection to a special _index phrase
;; file_. RefTeX can later search the document for occurrences
;; of these phrases and let you interactively index the matches.
-;;
+;;
;; * Displaying and Editing the Index
;; To display the compiled index in a special buffer, type `C-c
;; >' (`reftex-display-index'). From that buffer you can check
;; and edit all entries.
-;;
+;;
;; 5. Viewing Cross-References
;; When point is on the KEY argument of a cross-referencing macro
;; (`\label', `\ref', `\cite', `\bibitem', `\index', and variations)
;; When the enclosing macro is `\cite' or `\ref' and no other message
;; occupies the echo area, information about the citation or label
;; will automatically be displayed in the echo area.
-;;
+;;
;; 6. Multifile Documents
;; Multifile Documents are fully supported. The included files must
;; have a file variable `TeX-master' or `tex-main-file' pointing to
;; the master file. RefTeX provides cross-referencing information
;; from all parts of the document, and across document borders
;; (`xr.sty').
-;;
+;;
;; 7. Document Parsing
;; RefTeX needs to parse the document in order to find labels and
;; other information. It does it automatically once and updates its
;; with a raw `C-u' prefix, or press the `r' key in the label
;; selection buffer, the table of contents buffer, or the index
;; buffer.
-;;
+;;
;; 8. AUCTeX
;; If your major LaTeX mode is AUCTeX, RefTeX can cooperate with it
;; (see variable `reftex-plug-into-AUCTeX'). AUCTeX contains style
;; files which trigger appropriate settings in RefTeX, so that for
;; many of the popular LaTeX packages no additional customizations
;; will be necessary.
-;;
+;;
;; 9. Useful Settings
;; To make RefTeX faster for large documents, try these:
;; (setq reftex-enable-partial-scans t)
;; (setq reftex-save-parse-info t)
;; (setq reftex-use-multiple-selection-buffers t)
-;;
+;;
;; To integrate with AUCTeX, use
;; (setq reftex-plug-into-AUCTeX t)
-;;
+;;
;; To make your own LaTeX macro definitions known to RefTeX,
;; customize the variables
;; `reftex-label-alist' (for label macros/environments)
;; `reftex-index-default-macro' (to set the default macro)
;; If you have a large number of macros defined, you may want to write
;; an AUCTeX style file to support them with both AUCTeX and RefTeX.
-;;
+;;
;; 10. Where Next?
;; Go ahead and use RefTeX. Use its menus until you have picked up
;; the key bindings. For an overview of what you can do in each of
;; The first part of the manual explains in a tutorial way how to use
;; and customize RefTeX. The second part is a command and variable
;; reference.
-;;
+;;
;;---------------------------------------------------------------------------
;;
;; AUTHOR
(defvar reftex-tables-dirty t
"Flag showing if tables need to be re-computed.")
-(eval-and-compile
- (defun reftex-set-dirty (symbol value)
- (setq reftex-tables-dirty t)
- (set symbol value)))
-
-
;;; =========================================================================
;;;
;;; Configuration variables
;;; Define the formal stuff for a minor mode named RefTeX.
;;;
-(defconst reftex-version "RefTeX version 4.10"
+(defconst reftex-version "RefTeX version 4.18"
"Version string for RefTeX.")
(defvar reftex-mode nil
(defvar reftex-mode-menu nil)
(defvar reftex-syntax-table nil)
-
+(defvar reftex-syntax-table-for-bib nil)
+
+(unless reftex-syntax-table
+ (setq reftex-syntax-table (copy-syntax-table))
+ (modify-syntax-entry ?\( "." reftex-syntax-table)
+ (modify-syntax-entry ?\) "." reftex-syntax-table))
+
+(unless reftex-syntax-table-for-bib
+ (setq reftex-syntax-table-for-bib
+ (copy-syntax-table reftex-syntax-table))
+ (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib)
+ (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib)
+ (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib)
+ (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib))
+
+;; The following definitions are out of place, but I need them here
+;; to make the compilation of reftex-mode not complain.
(defvar reftex-auto-view-crossref-timer nil
"The timer used for auto-view-crossref.")
+(defvar reftex-toc-auto-recenter-timer nil
+ "The idle timer used to recenter the toc window.")
;;;###autoload
(defun turn-on-reftex ()
(and reftex-auto-view-crossref
(reftex-toggle-auto-view-crossref))
(put 'reftex-auto-view-crossref 'initialized t))
- (unless reftex-syntax-table
- (setq reftex-syntax-table (copy-syntax-table (syntax-table)))
- (modify-syntax-entry ?\( "." reftex-syntax-table)
- (modify-syntax-entry ?\) "." reftex-syntax-table))
+ (unless (get 'reftex-auto-recenter-toc 'initialized)
+ (and reftex-auto-recenter-toc
+ (reftex-toggle-auto-toc-recenter))
+ (put 'reftex-auto-recenter-toc 'initialized t))
+
+ ;; Prepare the special syntax tables.
+ (setq reftex-syntax-table (copy-syntax-table (syntax-table)))
+ (modify-syntax-entry ?\( "." reftex-syntax-table)
+ (modify-syntax-entry ?\) "." reftex-syntax-table)
+
+ (setq reftex-syntax-table-for-bib
+ (copy-syntax-table reftex-syntax-table))
+ (modify-syntax-entry ?\' "." reftex-syntax-table-for-bib)
+ (modify-syntax-entry ?\" "." reftex-syntax-table-for-bib)
+ (modify-syntax-entry ?\[ "." reftex-syntax-table-for-bib)
+ (modify-syntax-entry ?\] "." reftex-syntax-table-for-bib)
+
(run-hooks 'reftex-mode-hook))
;; Mode was turned off
(easy-menu-remove reftex-mode-menu)))
;;; =========================================================================
;;;
;;; Silence warnings about variables in other packages.
-(defvar TeX-master)
-(defvar LaTeX-section-hook)
-(defvar LaTeX-label-function)
-(defvar tex-main-file)
-(defvar outline-minor-mode)
-(defvar font-lock-mode)
-(defvar font-lock-fontify-region-function)
-(defvar font-lock-syntactic-keywords)
+(eval-when-compile
+ (defvar TeX-master)
+ (defvar LaTeX-section-hook)
+ (defvar LaTeX-label-function)
+ (defvar tex-main-file)
+ (defvar outline-minor-mode)
+ (defvar font-lock-mode)
+ (defvar font-lock-fontify-region-function)
+ (defvar font-lock-syntactic-keywords))
;;; =========================================================================
;;;
((master
(cond
((fboundp 'TeX-master-file) ; AUCTeX is loaded. Use its mechanism.
- (condition-case nil
+ (condition-case nil
(TeX-master-file t)
(error (buffer-file-name))))
+ ((fboundp 'tex-main-file) (tex-main-file)) ; Emacs LaTeX mode
((boundp 'TeX-master) ; The variable is defined - lets use it.
(cond
((eq TeX-master t)
(buffer-file-name)))))
(cond
((null master)
- (error "Need a filename for this buffer, please save it first"))
+ (error "Need a filename for this buffer, please save it first"))
((or (file-exists-p (concat master ".tex"))
(reftex-get-buffer-visiting (concat master ".tex")))
;; Ahh, an extra .tex was missing...
)
(t
;; Use buffer file name.
- (buffer-file-name)))
+ (setq master (buffer-file-name))))
(expand-file-name master)))
(defun reftex-is-multi ()
;; The following constants are derived from `reftex-label-alist'.
;; Prompt used for label type queries directed to the user.
-(defconst reftex-type-query-prompt nil)
+(defvar reftex-type-query-prompt nil)
;; Help string for label type queries.
-(defconst reftex-type-query-help nil)
+(defvar reftex-type-query-help nil)
;; Alist relating label type to reference format.
-(defconst reftex-typekey-to-format-alist nil)
+(defvar reftex-typekey-to-format-alist nil)
;; Alist relating label type to label prefix.
-(defconst reftex-typekey-to-prefix-alist nil)
+(defvar reftex-typekey-to-prefix-alist nil)
;; Alist relating environments or macros to label type and context regexp.
-(defconst reftex-env-or-mac-alist nil)
+(defvar reftex-env-or-mac-alist nil)
;; List of special environment parser functions
-(defconst reftex-special-env-parsers nil)
+(defvar reftex-special-env-parsers nil)
;; List of macros carrying a label.
-(defconst reftex-label-mac-list nil)
+(defvar reftex-label-mac-list nil)
;; List of environments carrying a label.
-(defconst reftex-label-env-list nil)
+(defvar reftex-label-env-list nil)
;; List of all typekey letters in use.
-(defconst reftex-typekey-list nil)
+(defvar reftex-typekey-list nil)
;; Alist relating magic words to a label type.
-(defconst reftex-words-to-typekey-alist nil)
+(defvar reftex-words-to-typekey-alist nil)
;; The last list-of-labels entry used in a reference.
(defvar reftex-last-used-reference (list nil nil nil nil))
;; Alist relating index macros to other info.
-(defconst reftex-key-to-index-macro-alist nil)
+(defvar reftex-key-to-index-macro-alist nil)
;; Prompt for index macro queries
-(defconst reftex-query-index-macro-prompt nil)
+(defvar reftex-query-index-macro-prompt nil)
;; Help string for index macro queries
-(defconst reftex-query-index-macro-help nil)
+(defvar reftex-query-index-macro-help nil)
;; The message when follow-mode is suspended
-(defconst reftex-no-follow-message
+(defvar reftex-no-follow-message
"No follow-mode into unvisited file. Press SPC to visit it.")
-(defconst reftex-no-info-message
+(defvar reftex-no-info-message
"%s: info not available, use `\\[reftex-view-crossref]' to get it.")
;; Global variables used for communication between functions.
(defvar reftex-callback-fwd t)
(defvar reftex-last-toc-master nil
"Stores the name of the tex file that `reftex-toc' was last run on.")
-(defvar reftex-auto-view-crossref-timer nil
- "The timer used for auto-view-crossref.")
;; Marker for return point from recursive edit
(defvar reftex-recursive-edit-marker (make-marker))
(defvar reftex-everything-regexp-no-index nil)
(defvar reftex-index-re nil)
(defvar reftex-find-citation-regexp-format
- "\\\\[a-zA-Z]*cite[*a-zA-Z]*\\*?\\(\\[[^]]*\\]\\|{[^}]*}\\)*{\\([^}]*,\\)?\\(%s\\)[},]")
+ "\\\\\\([a-zA-Z]*cite[*a-zA-Z]*\\*?\\|bibentry\\)\\(\\[[^]]*\\]\\|{[^}]*}\\)*{\\([^}]*,\\)?\\(%s\\)[},]")
(defvar reftex-find-reference-format
"\\\\\\(ref[a-zA-Z]*\\|[a-zA-Z]*ref\\(range\\)?\\)\\*?\\(\\[[^]]*\\]\\|{[^}]*}\\)*{\\(%s\\)}")
(defvar reftex-macros-with-labels nil)
;; A list of all variables in the cache.
;; The cache is used to save the compiled versions of some variables.
-(defconst reftex-cache-variables
+(defconst reftex-cache-variables
'(reftex-memory ;; This MUST ALWAYS be the first!
-
+
;; Outline
reftex-section-levels-all
;; Labels
- reftex-env-or-mac-alist
+ reftex-env-or-mac-alist
reftex-special-env-parsers
reftex-macros-with-labels
reftex-label-mac-list
reftex-index-macro-alist
reftex-macros-with-index
reftex-query-index-macro-prompt
- reftex-query-index-macro-help
+ reftex-query-index-macro-help
reftex-key-to-index-macro-alist
;; Regular expressions
(t (reftex-compile-variables)))))
(defun reftex-reset-mode ()
- "Reset RefTeX Mode.
+ "Reset RefTeX Mode.
This will re-compile the configuration information and remove all
current scanning information and the parse file to enforce a rescan
on next use."
(defun reftex-erase-all-selection-and-index-buffers ()
;; Remove all selection buffers associated with current document.
- (mapcar
+ (mapcar
(lambda (type)
(reftex-erase-buffer (reftex-make-selection-buffer-name type)))
reftex-typekey-list)
;; Kill all index buffers
- (mapcar
+ (mapcar
(lambda (tag)
(reftex-kill-buffer (reftex-make-index-buffer-name tag)))
(cdr (assoc 'index-tags (symbol-value reftex-docstruct-symbol)))))
;; Record that we have done this, and what we have used.
(setq reftex-tables-dirty nil)
- (setq reftex-memory
+ (setq reftex-memory
(list reftex-label-alist
(get reftex-docstruct-symbol 'reftex-section-levels)
(get reftex-docstruct-symbol 'reftex-label-alist-style)
'(nil)))
(all-index (reftex-uniquify-by-car
(reftex-splice-symbols-into-list
- (append reftex-index-macros
+ (append reftex-index-macros
(get reftex-docstruct-symbol
'reftex-index-macros-style)
'(default))
((symbolp env-or-mac)
;; A special parser function
(unless (fboundp env-or-mac)
- (message "Warning: %s does not seem to be a valid function"
+ (message "Warning: %s does not seem to be a valid function"
env-or-mac))
(setq nargs nil nlabel nil opt-args nil)
(add-to-list 'reftex-special-env-parsers env-or-mac)
(push (cons string toc-level) toc-levels))))))))
;; Translate some special context cases
(when (assq context reftex-default-context-regexps)
- (setq context
- (format
+ (setq context
+ (format
(cdr (assq context reftex-default-context-regexps))
(regexp-quote env-or-mac))))
;; See if this is the first format for this typekey
(nreverse reftex-typekey-to-prefix-alist))
;; Prepare the typekey query prompt and help string.
- (setq qh-list
+ (setq qh-list
(sort qh-list
(lambda (x1 x2)
(string< (downcase (car x1)) (downcase (car x2))))))
"]"))
;; In the help string, we need to wrap lines...
(setq reftex-type-query-help
- (concat
+ (concat
"SELECT A LABEL TYPE:\n--------------------\n"
(mapconcat
(lambda(x)
;; which allow for some chars from the ref format to be in the buffer.
;; These characters will be seen and removed.
(setq reftex-words-to-typekey-alist
- (mapcar
+ (mapcar
(lambda (x)
(setq word (car x)
typekey (cdr x)
(setq reftex-key-to-index-macro-alist
(sort reftex-key-to-index-macro-alist
(lambda (a b) (< (downcase (car a)) (downcase (car b))))))
- (setq reftex-query-index-macro-prompt
+ (setq reftex-query-index-macro-prompt
(concat "Index macro: ["
(mapconcat (lambda (x) (char-to-string (car x)))
reftex-key-to-index-macro-alist "")
"]"))
(setq i 0
reftex-query-index-macro-help
- (concat
+ (concat
"SELECT A MACRO:\n---------------\n"
(mapconcat
(lambda(x)
- (format "[%c] %-20.20s%s" (car x) (nth 1 x)
+ (format "[%c] %-20.20s%s" (car x) (nth 1 x)
(if (= 0 (mod (incf i) 3)) "\n" "")))
reftex-key-to-index-macro-alist "")))
reftex-section-levels))
;; Calculate the regular expressions
- (let* ((wbol "\\(\\`\\|[\n\r]\\)[ \t]*")
+ (let* (
+; (wbol "\\(\\`\\|[\n\r]\\)[ \t]*")
+ (wbol "\\(^\\)[ \t]*") ; Need to keep the empty group because
+ ;;; because match number are hard coded
(label-re "\\\\label{\\([^}]*\\)}")
- (include-re (concat wbol "\\\\\\(include\\|input\\)[{ \t]+\\([^} \t\n\r]+\\)"))
+ (include-re (concat wbol
+ "\\\\\\("
+ (mapconcat 'identity
+ reftex-include-file-commands "\\|")
+ "\\)[{ \t]+\\([^} \t\n\r]+\\)"))
(section-re
(concat wbol "\\\\\\("
- (mapconcat 'car reftex-section-levels-all "\\|")
- "\\)\\*?\\(\\[[^]]*\\]\\)?{?"))
+ (mapconcat (lambda (x) (regexp-quote (car x)))
+ reftex-section-levels-all "\\|")
+ "\\)\\*?\\(\\[[^]]*\\]\\)?[[{ \t\r\n]"))
(appendix-re (concat wbol "\\(\\\\appendix\\)"))
(macro-re
(if macros-with-labels
reftex-macros-with-labels macros-with-labels
reftex-find-index-entry-regexp-format find-index-re-format
reftex-find-label-regexp-format find-label-re-format
- reftex-find-label-regexp-format2
+ reftex-find-label-regexp-format2
"\\([]} \t\n\r]\\)\\([[{]\\)\\(%s\\)[]}]")
(message "Compiling label environment definitions...done")))
(put reftex-docstruct-symbol 'reftex-cache
;; Scan whatever was required by the caller.
(reftex-do-parse rescan file))))
+(defun reftex-scanning-info-available-p ()
+ "Is the scanning info about the current document available?"
+ (unless reftex-docstruct-symbol
+ (reftex-tie-multifile-symbols))
+ (and (symbolp reftex-docstruct-symbol)
+ (symbol-value reftex-docstruct-symbol)
+ t))
+
(defun reftex-silence-toc-markers (list n)
;; Set all toc markers in the first N entries in list to nil
(while (and list (> (decf n) -1))
(master (reftex-TeX-master-file))
(enable-local-variables nil)
(file (if (string-match "\\.[a-zA-Z]+\\'" master)
- (concat (substring master 0 (match-beginning 0))
+ (concat (substring master 0 (match-beginning 0))
reftex-parse-file-extension)
(concat master reftex-parse-file-extension))))
(cond
;; Check if the master is the same: when moving a document, this will see it.
(let* ((real-master (reftex-TeX-master-file))
- (parsed-master
+ (parsed-master
(nth 1 (assq 'bof (symbol-value reftex-docstruct-symbol)))))
(unless (string= (file-truename real-master) (file-truename parsed-master))
(message "Master file name in load file is different: %s versus %s"
(defun reftex-select-external-document (xr-alist xr-index)
;; Return index of an external document.
(let* ((len (length xr-alist)) (highest (1- (+ ?0 len)))
- (prompt (format "[%c-%c] Select TAB: Read prefix with completion"
+ (prompt (format "[%c-%c] Select TAB: Read prefix with completion"
?0 highest))
key prefix)
(cond
(- 1 xr-index))
(t
(save-excursion
- (let* ((length (apply 'max (mapcar
+ (let* ((length (apply 'max (mapcar
(lambda(x) (length (car x))) xr-alist)))
(fmt (format " [%%c] %%-%ds %%s\n" length))
(n (1- ?0)))
(concat
"SELECT EXTERNAL DOCUMENT\n------------------------\n"
(mapconcat
- (lambda (x)
+ (lambda (x)
(format fmt (incf n) (or (car x) "")
(abbreviate-file-name (cdr x))))
xr-alist ""))
(let* ((rec-values (if reftex-search-unrecursed-path-first '(nil t) '(t)))
(extensions (cdr (assoc type reftex-file-extensions)))
(def-ext (car extensions))
- (ext-re (concat "\\("
+ (ext-re (concat "\\("
(mapconcat 'regexp-quote extensions "\\|")
"\\)\\'"))
(files (if (string-match ext-re file)
path old-path file1)
(cond
((file-name-absolute-p file)
- (setq file1
- (or
+ (setq file1
+ (or
(and (car files) (file-regular-p (car files)) (car files))
(and (cdr files) (file-regular-p (cdr files)) (cdr files)))))
((and reftex-use-external-file-finders
(setq old-path path
path (cons master-dir path)
file1 (or (and (car files)
- (reftex-find-file-on-path
+ (reftex-find-file-on-path
(car files) path master-dir))
(and (cdr files)
- (reftex-find-file-on-path
+ (reftex-find-file-on-path
(cdr files) path master-dir))))))))
(cond (file1 file1)
(die (error "No such file: %s" file) nil)
(reftex-uniq
(reftex-parse-colon-path
(mapconcat
- (lambda(x)
+ (lambda(x)
(if (string-match "^!" x)
(apply 'reftex-process-string
(split-string (substring x 1)))
;; (cdr (assoc type reftex-path-environment))
;; However, historically we have separate options for the
;; environment variables, so we have to do this:
- (symbol-value (intern (concat "reftex-" type
+ (symbol-value (intern (concat "reftex-" type
"path-environment-variables")))
path-separator))))
(put pathvar 'status 'split)
;; or: Relative recursive path elements need to be expanded
;; relative to new default directory
(message "Expanding search path to find %s file: %s ..." type file)
- (put pathvar 'recursive-path
+ (put pathvar 'recursive-path
(reftex-expand-path (symbol-value pathvar) master-dir))
(put pathvar 'master-dir master-dir)
(get pathvar 'recursive-path))
- (t
+ (t
;; Recursive path computed earlier is still OK.
(get pathvar 'recursive-path)))
;; The simple path was requested
;; Trailing ! or !! will be converted into `//' (emTeX convention)
(mapcar
(lambda (dir)
- (if (string-match "\\(//+\\|/*!+\\)\\'" dir)
+ (if (string-match "\\(//+\\|/*!+\\)\\'" dir)
(setq dir (replace-match "//" t t dir)))
(file-name-as-directory dir))
(delete "" (split-string path (concat path-separator "+")))))
(when (file-directory-p dir)
(setq files (nreverse (directory-files dir t "[^.]")))
(while (setq file (pop files))
- (if (file-directory-p file)
+ (if (file-directory-p file)
(push (file-name-as-directory file) path)))
(push dir path1)))
path1))
"Insert a unique label." t)
(autoload 'reftex-reference "reftex-ref"
"Make a LaTeX reference." t)
+(autoload 'reftex-varioref-vref "reftex-ref"
+ "Make a varioref reference." t)
+(autoload 'reftex-fancyref-fref "reftex-ref"
+ "Make a fancyref \\fref reference." t)
+(autoload 'reftex-fancyref-Fref "reftex-ref"
+ "Make a fancyref \\Fref reference." t)
(autoload 'reftex-show-label-location "reftex-ref")
(autoload 'reftex-query-label-type "reftex-ref")
-
+(autoload 'reftex-goto-label "reftex-ref"
+ "Prompt for label name and go to that location." t)
;;; =========================================================================
;;;
;;; Table of contents
(autoload 'reftex-toc "reftex-toc"
- "Show the table of contents for the current document." t)
+ "Show the table of contents for the current document." t)
+(autoload 'reftex-toc-recenter "reftex-toc"
+ "Display the TOC window and highlight line corresponding to current position." t)
+(autoload 'reftex-toggle-auto-toc-recenter "reftex-toc" t)
;;; =========================================================================
;;;
;;; BibTeX citations.
+(autoload 'reftex-citep "reftex-cite")
+(autoload 'reftex-citet "reftex-cite")
(autoload 'reftex-make-cite-echo-string "reftex-cite")
(autoload 'reftex-get-bibfile-list "reftex-cite")
(autoload 'reftex-pop-to-bibtex-entry "reftex-cite")
(autoload 'reftex-citation "reftex-cite"
"Make a citation using BibTeX database files." t)
(autoload 'reftex-default-bibliography "reftex-cite")
-
+(autoload 'reftex-bib-or-thebib "reftex-cite")
;;; =========================================================================
;;;
(while list
(if (funcall predicate (car list))
(push (if completion
- (list (nth nth (car list)))
+ (list (nth nth (car list)))
(nth nth (car list)))
rtn))
(setq list (cdr list)))
;; If POS is given, calculate distances relative to it.
;; Return nil if there is no match.
(let ((pos (point))
- (dist (or max-length (length regexp)))
+ (dist (or max-length (length regexp)))
match1 match2 match)
(goto-char (min (+ pos dist) (point-max)))
(when (re-search-backward regexp nil t)
(switch-to-buffer-other-window "*RefTeX Select*")
(insert help-string)
(goto-char 1)
- (unless (and (pos-visible-in-window-p 1)
+ (unless (and (pos-visible-in-window-p (point-min))
(pos-visible-in-window-p (point-max)))
- (enlarge-window (1+ (- (count-lines 1 (point-max))
+ (enlarge-window (1+ (- (count-lines (point-min) (point-max))
(reftex-window-height)))))
(setq truncate-lines t))
- (if (and (pos-visible-in-window-p 1)
+ (if (and (pos-visible-in-window-p (point-min))
(pos-visible-in-window-p (point-max)))
nil
(setq prompt (concat prompt (if scroll " (SPC/DEL=Scroll)" ""))))
((and scroll (equal char ?\C-? ))
(condition-case nil (scroll-down) (error nil))
(message prompt))
- (t (message "")
+ (t (message "")
(throw 'exit char)))
(setq char (read-char-exclusive)))))))
-
+
(defun reftex-make-regexp-allow-for-ctrl-m (string)
;; convert STRING into a regexp, allowing ^M for \n and vice versa
;; Restrict number of words
(if (> (length words) nwords)
(setcdr (nthcdr (1- nwords) words) nil))
-
+
;; First, try to use all words
(setq string (mapconcat 'identity words sep))
-
+
;; Abbreviate words if enforced by user settings or string length
(if (or (eq t abbrev)
(and abbrev
(font-lock-set-defaults-1)
(reftex-select-font-lock-fontify-region (point-min) (point-max))))
(t
- ;; Oops?
+ ;; Oops?
(message "Sorry: cannot refontify RefTeX Select buffer."))))
(rename-buffer oldname))))
(if (featurep 'xemacs) (require 'overlay))
;; We keep a vector with several different overlays to do our highlighting.
-(defvar reftex-highlight-overlays [nil nil])
+(defvar reftex-highlight-overlays [nil nil nil])
;; Initialize the overlays
(aset reftex-highlight-overlays 0 (make-overlay 1 1))
-(overlay-put (aref reftex-highlight-overlays 0)
+(overlay-put (aref reftex-highlight-overlays 0)
'face 'highlight)
(aset reftex-highlight-overlays 1 (make-overlay 1 1))
(overlay-put (aref reftex-highlight-overlays 1)
'face reftex-cursor-selected-face)
+(aset reftex-highlight-overlays 2 (make-overlay 1 1))
+(overlay-put (aref reftex-highlight-overlays 2)
+ 'face reftex-cursor-selected-face)
;; Two functions for activating and deactivation highlight overlays
(defun reftex-highlight (index begin end &optional buffer)
;;; =========================================================================
;;;
-;;; Keybindings
+;;; Keybindings
;; The default bindings in the mode map.
(loop for x in
'(("\C-c=" . reftex-toc)
+ ("\C-c-" . reftex-toc-recenter)
("\C-c(" . reftex-label)
("\C-c)" . reftex-reference)
("\C-c[" . reftex-citation)
;; Bind `reftex-mouse-view-crossref' only when the key is still free
(if (featurep 'xemacs)
(unless (key-binding [(shift button2)])
- (define-key reftex-mode-map [(shift button2)]
+ (define-key reftex-mode-map [(shift button2)]
'reftex-mouse-view-crossref))
(unless (key-binding [(shift mouse-2)])
- (define-key reftex-mode-map [(shift mouse-2)]
+ (define-key reftex-mode-map [(shift mouse-2)]
'reftex-mouse-view-crossref)))
;; Bind `reftex-view-crossref-from-bibtex' in BibTeX mode map
"Menu used in RefTeX mode"
`("Ref"
["Table of Contents" reftex-toc t]
+ ["Recenter TOC" reftex-toc-recenter t]
"--"
["\\label" reftex-label t]
["\\ref" reftex-reference t]
["Entire Document" reftex-parse-all t]
["Save to File" (reftex-access-parse-file 'write)
(> (length (symbol-value reftex-docstruct-symbol)) 0)]
- ["Restore from File" (reftex-access-parse-file 'restore) t]
- "--"
- ["Reset RefTeX Mode" reftex-reset-mode t])
+ ["Restore from File" (reftex-access-parse-file 'restore) t])
("Global Actions"
["Search Whole Document" reftex-search-document t]
["Replace in Document" reftex-query-replace-document t]
["Grep on Document" reftex-grep-document t]
"--"
+ ["Goto Label" reftex-goto-label t]
["Find Duplicate Labels" reftex-find-duplicate-labels t]
["Change Label and Refs" reftex-change-label t]
["Renumber Simple Labels" reftex-renumber-simple-labels t]
(setq reftex-save-parse-info (not reftex-save-parse-info))
:style toggle :selected reftex-save-parse-info]
"--"
+ "TOC RECENTER"
+ ["Automatic Recenter" reftex-toggle-auto-toc-recenter
+ :style toggle :selected reftex-toc-auto-recenter-timer]
+ "--"
"CROSSREF INFO"
["Automatic Info" reftex-toggle-auto-view-crossref
:style toggle :selected reftex-auto-view-crossref-timer]
("Reference Style"
["Default" (setq reftex-vref-is-default nil
reftex-fref-is-default nil)
- :style radio :selected (not (or reftex-vref-is-default
+ :style radio :selected (not (or reftex-vref-is-default
reftex-fref-is-default))]
["Varioref" (setq reftex-vref-is-default t
reftex-fref-is-default nil)
(list 'reftex-add-index-macros (list 'list (list 'quote (car x))))
:style 'radio :selected
(list 'memq (list 'quote (car x))
- (list 'get 'reftex-docstruct-symbol
+ (list 'get 'reftex-docstruct-symbol
(list 'quote 'reftex-index-macros-style)))))
reftex-index-macros-builtin))
+ "--"
+ ["Reset RefTeX Mode" reftex-reset-mode t]
"--"
("Customize"
["Browse RefTeX Group" reftex-customize t]
"--"
- ["Build Full Customize Menu" reftex-create-customize-menu
+ ["Build Full Customize Menu" reftex-create-customize-menu
(fboundp 'customize-menu-create)])
("Documentation"
["Info" reftex-info t]
(interactive)
(if (fboundp 'customize-menu-create)
(progn
- (easy-menu-change
+ (easy-menu-change
'("Ref") "Customize"
`(["Browse RefTeX group" reftex-customize t]
"--"
;;; That's it! ----------------------------------------------------------------
(setq reftex-tables-dirty t) ; in case this file is evaluated by hand
-(provide 'reftex)
+(provide 'reftex)
;;;============================================================================
;;; reftex.el ends here
-