annotate lisp/modes/reftex.el @ 207:e45d5e7c476e r20-4b2

Import from CVS: tag r20-4b2
author cvs
date Mon, 13 Aug 2007 10:03:52 +0200
parents a2f645c6b9f8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1 ;; reftex.el --- Minor mode for doing \label, \ref and \cite in LaTeX
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2 ;; Copyright (c) 1997 Free Software Foundation, Inc.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4 ;; Version: 3.7
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5 ;; Author: Carsten Dominik <dominik@strw.LeidenUniv.nl>
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
6 ;; Keywords: tex
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
7
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
9
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
13 ;; any later version.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
14
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
18 ;; GNU General Public License for more details.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
19
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
23 ;; Boston, MA 02111-1307, USA.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
24
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
25 ;;---------------------------------------------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
26 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
27 ;;; Commentary:
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
28 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
29 ;; RefTeX is a minor mode with distinct support for \ref, \label and
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
30 ;; \cite commands in (multi-file) LaTeX documents.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
31 ;; Labels are created semi-automatically. Definition context of labels is
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
32 ;; provided when creating a reference. Citations are simplified with
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
33 ;; efficient database lookup. A table of contents buffer provides easy
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
34 ;; access to any part of a document.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
35 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
36 ;; To turn RefTeX Minor Mode on and off in a particular buffer, use
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
37 ;; `M-x reftex-mode'.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
38 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
39 ;; To turn on RefTeX Minor Mode for all LaTeX files, add one of the
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
40 ;; following lines to your .emacs file:
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
41 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
42 ;; (add-hook 'LaTeX-mode-hook 'turn-on-reftex) ; with AUCTeX LaTeX mode
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
43 ;; (add-hook 'latex-mode-hook 'turn-on-reftex) ; with Emacs latex mode
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
44 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
45 ;; For default key bindings, see further down in this documentation.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
46 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
47 ;;---------------------------------------------------------------------------
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
48 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
49 ;; CONTENTS
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
50 ;; --------
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
51 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
52 ;; Overview............................ All you need to know to get started.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
53 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
54 ;; Configuration....................... How to configure RefTeX.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
55 ;; Configuration Examples........... Tutorial examples.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
56 ;; Hooks............................ Available hooks.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
57 ;; Configuration Variables.......... Complete listing.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
58 ;; Key Bindings........................ A list of default bindings.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
59 ;; Multifile Documents................. Documents spread over many files.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
60 ;; References to Other Documents....... RefTeX and the LaTeX package `xr'.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
61 ;; Optimizations for Large Documents... How to improve speed and memory use.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
62 ;; Related Packages.................... Other Emacs packages.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
63 ;; Known Bugs and Work-Arounds......... First aid.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
64 ;; Author.............................. Who wrote RefTeX and who helped.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
65 ;; History............................. What was new in which version.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
66 ;;---------------------------------------------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
67 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
68 ;; OVERVIEW
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
69 ;; ========
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
70 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
71 ;; 1. USING \label AND \ref. Labels and references are one of the strong
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
72 ;; points of LaTeX. But, in documents with hundreds of equations,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
73 ;; figures, tables etc. it becomes quickly impossible to find good label
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
74 ;; names and to actually remember them. Then, also completion of labels
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
75 ;; is not enough. One actually needs to see the context of the label
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
76 ;; definition to find the right one.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
77 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
78 ;; - RefTeX distinguishes labels for different environments. It always
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
79 ;; knows if a certain label references a figure, table etc.. You can
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
80 ;; configure RefTeX to recognize any additional labeled environments
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
81 ;; you have defined yourself.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
82 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
83 ;; - RefTeX defines automatically unique labels. Type `C-c ('
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
84 ;; (`reftex-label') to insert a label at point. RefTeX will either
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
85 ;; - derive a label from context (default for section labels)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
86 ;; - insert a simple label consisting of a prefix and a number
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
87 ;; (default for equations,enumerate items, and footnotes) or
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
88 ;; - prompt for a label string (figures and tables).
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
89 ;; Which labels are created how can be controlled with the variable
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
90 ;; `reftex-insert-label-flags'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
91 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
92 ;; - Referencing labels is a snap and I promise you'll love it. In
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
93 ;; order to make a reference, type `C-c )' (`reftex-reference'). This
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
94 ;; shows an outline of the document with all labels of a certain type
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
95 ;; (figure, equation,...) and context of the label definition.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
96 ;; Selecting one of the labels inserts a \ref macro into the original
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
97 ;; buffer. Online help during the selection is available with `?'.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
98 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
99 ;; 2. CITATIONS. After typing `C-c [' (`reftex-citation'), RefTeX will let
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
100 ;; you specify a regexp to search in current BibTeX database files (as
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
101 ;; specified in the \bibliography command) and pull out a formatted list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
102 ;; of matches for you to choose from. The list is *formatted* and
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
103 ;; sorted, thus much easier to read than the raw database entries. The
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
104 ;; text inserted into the buffer is by default just `\cite{KEY}', but
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
105 ;; can also contain author names and the year in a configurable way.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
106 ;; See documentation of the variable `reftex-cite-format'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
107 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
108 ;; 3. TABLE OF CONTENTS. Typing `C-c =' (`reftex-toc') will show a table
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
109 ;; of contents of the document. From that buffer, you can jump quickly
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
110 ;; to every part of your document. This is similar to imenu, only it
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
111 ;; works for entire multifile documents and uses the keyboard rather
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
112 ;; than the mouse. The initial version of this function was contributed
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
113 ;; by Stephen Eglen.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
114 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
115 ;; 4. MULTIFILE DOCUMENTS are fully supported by RefTeX. Such documents
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
116 ;; consist of a master file and many other files being included via
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
117 ;; \input or \include. RefTeX will provide cross referencing
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
118 ;; information from all files which are part of the document. See
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
119 ;; `RefTeX and Multifile Documents' further down in the documentation
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
120 ;; for more information on this topic.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
121 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
122 ;; 5. DOCUMENT PARSING. RefTeX needs to parse the document in order to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
123 ;; find labels and other information. It will do it automatically once,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
124 ;; when you start working with a document. Re-parsing should not be
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
125 ;; necessary too often since RefTeX updates its lists internally when
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
126 ;; you make a new label with `reftex-label'. To enforce reparsing,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
127 ;; call any of the functions `reftex-citation', `reftex-label',
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
128 ;; `reftex-reference', `reftex-toc' with a raw C-u prefix, or press the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
129 ;; `r' key in the label menu and table of contents buffer.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
130 ;;---------------------------------------------------------------------------
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
131 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
132 ;; CONFIGURATION
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
133 ;; =============
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
134 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
135 ;; RefTeX needs to be configured if you use labels to mark environments
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
136 ;; defined by yourself (e.g. with `\newenvironment') or in packages not
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
137 ;; included in the standard LaTeX distribution. RefTeX's default settings
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
138 ;; make it recognize practically all labeled environments and macros
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
139 ;; discussed in `The LaTeX Companion' by Goossens, Mittelbach & Samarin,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
140 ;; Addison-Wesley 1994. These are:
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
141 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
142 ;; - figure, figure*, table, table*, equation, eqnarray, enumerate,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
143 ;; the \footnote macro (this is the LaTeX core stuff)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
144 ;; - align, gather, multline, flalign, alignat, xalignat, xxalignat,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
145 ;; subequations (from AMS-LaTeX's amsmath.sty package)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
146 ;; - the \endnote macro (from endnotes.sty)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
147 ;; - Beqnarray (fancybox.sty)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
148 ;; - floatingfig (floatfig.sty)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
149 ;; - longtable (longtable.sty)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
150 ;; - figwindow, tabwindow (picinpar.sty)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
151 ;; - sidewaysfigure, sidewaystable (rotating.sty)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
152 ;; - subfigure, subfigure*, the \subfigure macro (subfigure.sty)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
153 ;; - supertabular (supertab.sty)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
154 ;; - wrapfigure (wrapfig.sty)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
155 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
156 ;; If you want to use any other labeled environments or macros, you need
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
157 ;; to configure RefTeX.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
158 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
159 ;; Per Abrahamsens custom.el package provides a simple way to do
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
160 ;; configuration. To try it out, use `M-x reftex-customize'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
161 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
162 ;; CONFIGURATION EXAMPLES
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
163 ;; ----------------------
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
164 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
165 ;; Suppose you are working with AMS-LaTeX amsmath package (with its math
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
166 ;; environments like `align', `multline' etc.). RefTeX is preconfigured to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
167 ;; recognize these - so there is nothing you have to do.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
168 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
169 ;; Suppose you are also using `\newtheorem' in LaTeX in order to define two
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
170 ;; new environments `theorem' and `axiom'
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
171 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
172 ;; \newtheorem{axiom}{Axiom}
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
173 ;; \newtheorem{theorem}{Theorem}
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
174 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
175 ;; to be used like this:
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
176 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
177 ;; \begin{axiom}
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
178 ;; \label{ax:first}
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
179 ;; ....
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
180 ;; \end{axiom}
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
181 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
182 ;; So we need to tell RefTeX that `theorem' and `axiom' are new labeled
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
183 ;; environments which define their own label categories. Here is how:
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
184 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
185 ;; (setq reftex-label-alist
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
186 ;; '(("axiom" ?a "ax:" "~\\ref{%s}" nil ("Axiom" "Ax."))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
187 ;; ("theorem" ?h "thr:" "~\\ref{%s}" t ("Theorem" "Theor." "Th."))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
188 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
189 ;; The type indicator characters ?a and ?h are used for prompts when RefTeX
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
190 ;; queries for a label type. Note that `h' was chosen for `theorem' since
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
191 ;; `t' is already taken by `table'. Note that also `s', `f', `e', `i', `n'
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
192 ;; are already used for standard environments.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
193 ;; The automatic labels for Axioms and Theorems will look like "ax:23" or
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
194 ;; "thr:24".
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
195 ;; The "\ref{%s}" is a format string indicating how to insert references to
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
196 ;; these labels.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
197 ;; The next item indicates how to grab context of the label definition.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
198 ;; - t means to get it from a default location (from the beginning of a
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
199 ;; \macro or after the \begin statement). t is *not* a good choice for
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
200 ;; eqnarray and similar environments.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
201 ;; - nil means to use the text right after the label definition.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
202 ;; - For more complex ways of getting context, see the docstring of
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
203 ;; `reftex-label-alist'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
204 ;; The strings at the end of each entry are used to guess the correct label
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
205 ;; type from the word before point when creating a reference. E.g. if you
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
206 ;; write: "As we have shown in Theorem" and then press `C-c )', RefTeX will
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
207 ;; know that you are looking for a theorem label and restrict the menu to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
208 ;; only these labels without even asking.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
209 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
210 ;; Depending on how you would like the label insertion and selection for
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
211 ;; the new environments to work, you might want to add the letters "a" and
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
212 ;; "h" to some of the flags in the following variables:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
213 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
214 ;; reftex-insert-label-flags reftex-label-menu-flags
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
215 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
216 ;; Suppose you want to make figures not directly with the figure
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
217 ;; environment, but with a macro like
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
218 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
219 ;; \newcommand{\myfig}[5][tbp]{%
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
220 ;; \begin{figure}[#1]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
221 ;; \epsimp[#5]{#2}
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
222 ;; \caption{#3}
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
223 ;; \label{#4}
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
224 ;; \end{figure}}
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
225 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
226 ;; which would be called like
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
227 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
228 ;; \myfig[htp]{filename}{caption text}{label}{1}
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
229 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
230 ;; Now we also need to tell RefTeX that the 4th argument of the \myfig
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
231 ;; macro is a figure label, and where to find the context.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
232 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
233 ;; (setq reftex-label-alist
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
234 ;; '(("axiom" ?a "ax:" "~\\ref{%s}" nil ("Axiom" "Ax."))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
235 ;; ("theorem" ?h "thr:" "~\\ref{%s}" t ("Theorem" "Theor." "Th."))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
236 ;; ("\\myfig[]{}{}{*}{}" ?f nil nil 3)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
237 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
238 ;; The empty pairs of brackets indicate the different arguments of the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
239 ;; \myfig macro. The `*' marks the label argument. `?f' indicates that
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
240 ;; this is a figure label which will be listed together with labels from
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
241 ;; normal figure environments. The nil entries for prefix and reference
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
242 ;; format mean to use the defaults for figure labels. The `3' for the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
243 ;; context method means to grab the 3rd macro argument - the caption.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
244 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
245 ;; As a side effect of this configuration, `reftex-label' will now insert
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
246 ;; the required naked label (without the \label macro) when point is
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
247 ;; directly after the opening parenthesis of a \myfig macro argument.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
248 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
249 ;; -----
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
250 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
251 ;; If you are writing in a language different from English you might want
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
252 ;; to add magic words for that language. Here is a German example:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
253 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
254 ;; (setq reftex-label-alist
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
255 ;; '((nil ?s nil nil nil ("Kapitel" "Kap." "Abschnitt" "Teil"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
256 ;; (nil ?e nil nil nil ("Gleichung" "Gl."))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
257 ;; (nil ?t nil nil nil ("Tabelle"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
258 ;; (nil ?f nil nil nil ("Figur" "Abbildung" "Abb."))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
259 ;; (nil ?n nil nil nil ("Anmerkung" "Anm."))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
260 ;; (nil ?i nil nil nil ("Punkt"))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
261 ;;
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
262 ;; Using nil as first item in each entry makes sure that this entry does
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
263 ;; not replace the original entry for that label type, but just adds magic
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
264 ;; words.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
265 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
266 ;; -----
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
267 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
268 ;; Normally, RefTeX inserts equation references with parenthesis like
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
269 ;; "~(\ref{KEY})". If you want to change this to square brackets, use
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
270 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
271 ;; (setq reftex-label-alist '((nil ?e nil "~[\\ref{%s}]" nil nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
272 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
273 ;; In order to use the AMS-LaTeX \eqref macro instead, either of the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
274 ;; following lines does the job.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
275 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
276 ;; (setq reftex-label-alist '((nil ?e nil "~\\eqref{%s}" nil nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
277 ;; (setq reftex-label-alist '(AMSTeX))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
278 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
279 ;; ----
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
280 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
281 ;; By default, citations are inserted simply as \cite{KEY}. You can have
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
282 ;; more complex citation commands with many available packages, most
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
283 ;; notably the harvard and natbib packages. RefTeX can be configured to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
284 ;; support these and other styles by setting the variable
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
285 ;; `reftex-cite-format'. E.g., for the natbib package you would use
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
286 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
287 ;; (setq reftex-cite-format 'natbib)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
288 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
289 ;; This can also be done as a file variable. For the full list of builtin
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
290 ;; options, try `M-x customize-variable RET reftex-cite-format RET'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
291 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
292 ;; HOOKS
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
293 ;; -----
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
294 ;; - Loading reftex.el runs the hook `reftex-load-hook'.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
295 ;; - Turning on reftex-mode runs `reftex-mode-hook'.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
296 ;; - Files visited literally are processed with
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
297 ;; `reftex-initialize-temporary-buffers' if that is a list of functions.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
298 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
299 ;; CONFIGURATION VARIABLES
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
300 ;; -----------------------
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
301 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
302 ;; The best way to learn about all configuration variables is via the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
303 ;; browser interface of the custom library. For reference, I am giving
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
304 ;; here a complete list.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
305 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
306 ;; ;; Defining label environments
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
307 ;; reftex-default-label-alist-entries
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
308 ;; reftex-label-alist
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
309 ;; reftex-section-levels
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
310 ;; reftex-default-context-regexps
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
311 ;; reftex-use-text-after-label-as-context
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
312 ;; ;; Label insertion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
313 ;; reftex-insert-label-flags
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
314 ;; reftex-derive-label-parameters
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
315 ;; reftex-label-illegal-re
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
316 ;; reftex-abbrev-parameters
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
317 ;; ;; Label referencing
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
318 ;; reftex-label-menu-flags
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
319 ;; reftex-level-indent
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
320 ;; reftex-refontify-context
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
321 ;; reftex-guess-label-type
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
322 ;; ;; BibteX citation configuration
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
323 ;; reftex-bibpath-environment-variables
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
324 ;; reftex-bibfile-ignore-list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
325 ;; reftex-sort-bibtex-matches
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
326 ;; reftex-cite-format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
327 ;; reftex-comment-citations
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
328 ;; reftex-cite-comment-format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
329 ;; reftex-cite-punctuation
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
330 ;; ;; Table of contents configuration
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
331 ;; reftex-toc-follow-mode
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
332 ;; ;; Fine-tuning the parser
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
333 ;; reftex-keep-temporary-buffers
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
334 ;; reftex-initialize-temporary-buffers
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
335 ;; reftex-enable-partial-scans
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
336 ;; reftex-save-parse-info
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
337 ;; ;; Miscellaneous configurations
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
338 ;; reftex-extra-bindings
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
339 ;; reftex-plug-into-AUCTeX
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
340 ;; reftex-use-fonts
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
341 ;; reftex-auto-show-entry
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
342 ;; reftex-load-hook
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
343 ;; reftex-mode-hook
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
344 ;;-------------------------------------------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
345 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
346 ;; KEY BINDINGS
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
347 ;; ============
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
348 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
349 ;; All RefTeX commands can be reached from its menu, the `Ref' menu on the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
350 ;; menu bar. More frequently used commands have key bindings:
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
351 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
352 ;; C-c = reftex-toc
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
353 ;; C-c ( reftex-label
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
354 ;; C-c ) reftex-reference
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
355 ;; C-c [ reftex-citation
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
356 ;; C-c & reftex-view-crossref
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
357 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
358 ;; These keys are chosen to avoid interfering with AUCTeX's settings.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
359 ;; Personally, I also bind some functions in the C-c LETTER map for
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
360 ;; easier access:
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
361 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
362 ;; C-c t reftex-toc
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
363 ;; C-c l reftex-label
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
364 ;; C-c r reftex-reference
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
365 ;; C-c c reftex-citation
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
366 ;; C-c v reftex-view-crossref
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
367 ;; C-c s reftex-search-document
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
368 ;; C-c g reftex-grep-document
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
369 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
370 ;; If you want to copy those as well, set in your .emacs file:
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
371 ;;
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
372 ;; (setq reftex-extra-bindings t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
373 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
374 ;; It is possible to bind the function for viewing cross references to a
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
375 ;; mouse event. Something like the following will do the trick:
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
376 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
377 ;; (add-hook 'reftex-load-hook
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
378 ;; '(lambda ()
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
379 ;; (define-key reftex-mode-map [(shift mouse-2)]
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
380 ;; 'reftex-mouse-view-crossref)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
381 ;;-------------------------------------------------------------------------
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
382 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
383 ;; REFTEX AND MULTIFILE DOCUMENTS
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
384 ;; ==============================
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
385 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
386 ;; The following is relevant when using RefTeX for multi-file documents:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
387 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
388 ;; o RefTeX has full support for multifile documents. You can edit parts
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
389 ;; of several (multifile) documents at the same time without conflicts.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
390 ;; RefTeX provides functions to run `grep', `search' and `query-replace'
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
391 ;; on all files which are part of a multifile document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
392 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
393 ;; o All files belonging to a multifile document should have a File
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
394 ;; Variable (`TeX-master' for AUCTeX or `tex-main-file' for the standard
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
395 ;; Emacs LaTeX mode) set to the name of the master file. See the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
396 ;; documentation of your (La)TeX mode and the Emacs documentation on
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
397 ;; file variables: [Emacs/Customization/Variables/File Variables].
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
398 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
399 ;; o The context of a label definition must be found in the same file as
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
400 ;; the label itself in order to be processed correctly by RefTeX. The
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
401 ;; only exception is that section labels referring to a section statement
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
402 ;; outside the current file can still use that section title as context.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
403 ;;-------------------------------------------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
404 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
405 ;; REFERENCES TO OTHER DOCUMENTS
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
406 ;; =============================
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
407 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
408 ;; RefTeX supports the LaTeX package `xr', which makes it possible to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
409 ;; reference labels defined in another document. See the documentation on
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
410 ;; `xr' for details.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
411 ;; When the document is set up to work with `xr', you can use the `x' key
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
412 ;; in the reference label menu to switch to the label menu of an external
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
413 ;; document and select any labels from there. In the *toc* buffer, the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
414 ;; `x' key can be used to switch to the table of contents of an external
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
415 ;; document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
416 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
417 ;; For this kind of inter-document cross references, saving of parsing
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
418 ;; information can mean a large speed-up.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
419 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
420 ;; (setq reftex-save-parse-info t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
421 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
422 ;;-------------------------------------------------------------------------
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
423 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
424 ;; OPTIMIZATIONS FOR LARGE DOCUMENTS
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
425 ;; =================================
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
426 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
427 ;; The default settings of RefTeX ensure a safe ride for beginners and
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
428 ;; casual users. However, when using RefTeX for a large project and/or on
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
429 ;; a small computer, there are ways to improve speed or memory usage.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
430 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
431 ;; o RefTeX will load other parts of a multifile document as well as BibTeX
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
432 ;; database files for lookup purposes. These buffers are kept, so that
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
433 ;; subsequent use of the same files is fast. If you can't afford keeping
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
434 ;; these buffers around, and if you can live with a speed penalty, try
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
435 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
436 ;; (setq reftex-keep-temporary-buffers nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
437 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
438 ;; o The `C-u' prefix on the major RefTeX commands `reftex-label',
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
439 ;; `reftex-reference', `reftex-citation' and `reftex-toc' initiates
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
440 ;; re-parsing of the entire document in order to update the parsing
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
441 ;; information. For a large document this can be unnecessary, in
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
442 ;; particular if only one file has changed. RefTeX can be configured to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
443 ;; do partial scans instead of full ones. `C-u' re-parsing then does
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
444 ;; apply only to the current buffer and files included from it.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
445 ;; Likewise, the `r' key in both the label menu and the table-of-contents
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
446 ;; buffer will only prompt scanning of the file in which the label or
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
447 ;; section macro near the cursor was defined. Re-parsing of the entire
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
448 ;; document is still available by using `C-u C-u' as a prefix, or the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
449 ;; capital `R' key in the menus. To use this feature, try
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
450 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
451 ;; (setq reftex-enable-partial-scans t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
452 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
453 ;; o Even with partial scans enabled, RefTeX still has to make one full
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
454 ;; scan, when you start working with a document. To avoid this, parsing
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
455 ;; information can stored in a file. The file `MASTER.rel' is used for
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
456 ;; storing information about a document with master file `MASTER.tex'.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
457 ;; It is written each time RefTeX parses (part of) the document, and
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
458 ;; restored when you begin working with a document in a new editing
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
459 ;; session. To use this feature, put into .emacs:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
460 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
461 ;; (setq reftex-save-parse-info t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
462 ;;----------------------------------------------------------------------------
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
463 ;;
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
464 ;; RELATED PACKAGES
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
465 ;; ================
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
466 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
467 ;; AUCTeX
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
468 ;; ------
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
469 ;; If you are writing TeX or LaTeX documents with Emacs, you should have
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
470 ;; a look at AUCTeX, the definitive package to work with TeX and LaTeX.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
471 ;; Information on AUCTeX can be found here:
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
472 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
473 ;; http://www.sunsite.auc.dk/auctex/
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
474 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
475 ;; Instead of using the RefTeX functions described above directly, you can
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
476 ;; also use them indirectly, through AUCTeX (version 9.8a or later).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
477 ;; RefTeX provides several interface functions which can be used as
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
478 ;; replacement for corresponding AUCTeX functions dealing with labels and
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
479 ;; citations. In this way you can work normally with AUCTeX and use RefTeX
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
480 ;; internals to create and complete labels and citation keys.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
481 ;;
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
482 ;; `reftex-label' can be used as the `LaTeX-label-function' which does
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
483 ;; label insertion when new environments are created with `C-c C-e'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
484 ;;
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
485 ;; `reftex-arg-label', `reftex-arg-ref' and `reftex-arg-cite' can replace
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
486 ;; the corresponding `TeX-arg-...' functions. E.g. when you insert a label
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
487 ;; macro with `C-c RET label RET', RefTeX will be transparently used to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
488 ;; create the label.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
489 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
490 ;; In order to plug all 4 functions into AUCTeX, use:
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
491 ;;
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
492 ;; (setq reftex-plug-into-AUCTeX t)
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
493 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
494 ;; You may also choose to plug in only some of these functions. See the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
495 ;; docstring of `reftex-plug-into-AUCTeX'.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
496 ;;
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
497 ;; AUCTeX can support RefTeX via style files. A style file may contain
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
498 ;; calls to `reftex-add-to-label-alist' which defines additions to
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
499 ;; `reftex-label-alist'. The argument taken by this function must have the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
500 ;; same format as `reftex-label-alist'. The `amsmath.el' style file of
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
501 ;; AUCTeX (>9.7p) for example contains the following:
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
502 ;;
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
503 ;; (TeX-add-style-hook "amsmath"
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
504 ;; (function
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
505 ;; (lambda ()
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
506 ;; (if (featurep 'reftex)
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
507 ;; (reftex-add-to-label-alist '(AMSTeX))))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
508 ;;
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
509 ;; while a package `myprop' defining a proposition environment with
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
510 ;; \newtheorem might use
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
511 ;;
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
512 ;; (TeX-add-style-hook "myprop"
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
513 ;; (function
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
514 ;; (lambda ()
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
515 ;; (if (featurep 'reftex)
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
516 ;; (reftex-add-to-label-alist
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
517 ;; '(("proposition" ?p "prop:" "~\\ref{%s}" t
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
518 ;; ("Proposition" "Prop."))))))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
519 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
520 ;; Bib-cite.el
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
521 ;; -----------
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
522 ;; Once you have written a document with labels, refs and citations, it can
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
523 ;; be nice to read such a file like a hypertext document. RefTeX has some
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
524 ;; support for that (`reftex-view-crossref', `reftex-search-document'). A
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
525 ;; more elegant interface with mouse support and links into Hyperbole is
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
526 ;; provided (among other things) by Peter S. Galbraith's `bib-cite.el'.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
527 ;; There is some overlap in the functionalities of Bib-cite and RefTeX.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
528 ;; Bib-cite.el comes bundled with AUCTeX. You can also get the latest
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
529 ;; version from
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
530 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
531 ;; ftp://ftp.phys.ocean.dal.ca/users/rhogee/elisp/bib-cite.el
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
532 ;;---------------------------------------------------------------------------
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
533 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
534 ;; KNOWN BUGS AND WORK-AROUNDS
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
535 ;; ===========================
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
536 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
537 ;; o \input, \include, \bibliography and \section (etc.) statements have
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
538 ;; to be first on a line (except for white space).
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
539 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
540 ;; o RefTeX sees also labels in regions commented out and will refuse to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
541 ;; make duplicates of such a label. This is considered to be a feature.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
542 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
543 ;; o When using partial scans (`reftex-enable-partial-scans'), the section
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
544 ;; numbers in the table of contents may eventually become wrong. A full
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
545 ;; scan will fix this.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
546 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
547 ;; o RefTeX keeps only a global copy of the configuration variables.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
548 ;; Also, any additions from style files go into a global variable.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
549 ;; Practically, this should not be a problem. Theoretically, it could
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
550 ;; give conflicts if two documents used environments with identical
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
551 ;; names, but different associated label types.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
552 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
553 ;; o When using packages which make the buffer representation of a file
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
554 ;; different from its disk representation (e.g. x-symbol, isotex,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
555 ;; iso-cvt) you may find that RefTeX's parsing information sometimes
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
556 ;; reflects the disk state of a file. This happens only in *unvisited*
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
557 ;; parts of a multifile document, because RefTeX visits these files
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
558 ;; literally for speed reasons. Then both short context and section
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
559 ;; headings may look different from what you usually see on your screen.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
560 ;; In rare cases `reftex-toc' may have problems to jump to an affected
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
561 ;; section heading. There are three possible ways to deal with this:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
562 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
563 ;; - (setq reftex-keep-temporary-buffers t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
564 ;; This implies that RefTeX will load all parts of a multifile
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
565 ;; document into Emacs (i.e. there will be no temporary buffers).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
566 ;; - (setq reftex-initialize-temporary-buffers t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
567 ;; This means full initialization of temporary buffers. It involves
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
568 ;; a penalty when the same file is used for lookup often.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
569 ;; - Set `reftex-initialize-temporary-buffers' to a list of hook
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
570 ;; functions doing a minimal initialization.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
571 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
572 ;; You might also want to check the variable `reftex-refontify-context'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
573 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
574 ;; o Some nasty :-# packages use an additional argument to a \begin macro
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
575 ;; to specify a label. E.g. Lamport's "pf.sty" uses both
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
576 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
577 ;; \step{LABEL}{CLAIM} and \begin{step+}{LABEL}
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
578 ;; CLAIM
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
579 ;; \end{step+}
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
580 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
581 ;; We need to trick RefTeX into swallowing this:
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
582 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
583 ;; ;; Configuration for Lamport's pf.sty
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
584 ;; (setq reftex-label-alist
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
585 ;; '(("\\step{*}{}" ?p "st:" "~\\stepref{%s}" 2 ("Step" "St."))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
586 ;; ("\\begin{step+}{*}" ?p "st:" "~\\stepref{%s}" 1000)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
587 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
588 ;; The first line is just a normal configuration for a macro. For the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
589 ;; `step+' environment we actually tell RefTeX to look for the *macro*
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
590 ;; "\begin{step+}" and interprete the *first* argument (which in reality
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
591 ;; is a second argument to the macro \begin) as a label of type ?p.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
592 ;; Argument count for this macro starts only after the {step+}, also
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
593 ;; when specifying how to get context.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
594 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
595 ;; o In XEmacs 19.15, the overlay library has a bug. RefTeX does not
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
596 ;; suffer from it, but since it loads the library, other packages like
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
597 ;; GNUS will switch from extents to overlays and hit the bug. Upgrade
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
598 ;; to XEmacs 20, or fix the overlay library (in line 180 of overlay.el,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
599 ;; change `(list before after)' to `(cons before after)').
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
600 ;;---------------------------------------------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
601 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
602 ;; AUTHOR
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
603 ;; ======
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
604 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
605 ;; Carsten Dominik <dominik@strw.LeidenUniv.nl>
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
606 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
607 ;; with contributions from Stephen Eglen
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
608 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
609 ;; The newest version of RefTeX can be found at
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
610 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
611 ;; http://www.strw.leidenuniv.nl/~dominik/Tools/
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
612 ;; ftp://strw.leidenuniv.nl/pub/dominik/
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
613 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
614 ;; THANKS TO:
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
615 ;; ---------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
616 ;; At least the following people have invested time to test and bug-fix
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
617 ;; reftex.el. Some have send patches for fixes or new features, or came
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
618 ;; up with useful ideas.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
619 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
620 ;; Stephen Eglen <stephene@cogs.susx.ac.uk>
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
621 ;; F.E. Burstall <F.E.Burstall@maths.bath.ac.uk>
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
622 ;; Karl Eichwalder <ke@ke.Central.DE>
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
623 ;; Laurent Mugnier <mugnier@onera.fr>
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
624 ;; Rory Molinari <molinari@yunt.math.lsa.umich.edu>
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
625 ;; Soren Dayton <csdayton@cs.uchicago.edu>
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
626 ;; Daniel Polani <polani@Informatik.Uni-Mainz.DE>
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
627 ;; Allan Strand <astrand@trillium.NMSU.Edu>
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
628 ;; Adrian Lanz <lanz@waho.ethz.ch>
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
629 ;; Jan Vroonhof <vroonhof@math.ethz.ch>
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
630 ;; Alastair Burt <alastair.burt@dfki.de>
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
631 ;; Dieter Kraft <dkraft@acm.org>
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
632 ;; Robin S. Socha <r.socha@franck.pc.uni-koeln.de>
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
633 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
634 ;; The view crossref feature was inspired by the similar function in
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
635 ;; Peter S. Galbraith's bib-cite.el.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
636 ;;
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
637 ;; Finally thanks to Uwe Bolick <bolick@physik.tu-berlin.de> who first
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
638 ;; got me (some years ago) into supporting LaTeX labels and references
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
639 ;; with an Editor (which was MicroEmacs at the time).
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
640 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
641 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
642 ;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
643 ;; HISTORY
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
644 ;; =======
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
645 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
646 ;; Here are the more important changes made to RefTeX since initial release.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
647 ;; Minor bug fixes are not mentioned.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
648 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
649 ;; Version 1.00
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
650 ;; - released on 7 Jan 1997.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
651 ;; Version 1.04
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
652 ;; - Macros as wrappers, AMSTeX support, delayed context parsing for
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
653 ;; new labels.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
654 ;; Version 1.05
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
655 ;; - XEmacs port.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
656 ;; Version 1.07
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
657 ;; - RefTeX gets its own menu.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
658 ;; Version 1.09
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
659 ;; - Support for tex-main-file, an analogue for TeX-master.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
660 ;; - MS-DOS support.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
661 ;; Version 2.00
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
662 ;; - Labels can be derived from context (default for sections).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
663 ;; - Configuration of label insertion and label referencing revised.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
664 ;; - Crossref fields in BibTeX database entries.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
665 ;; - `reftex-toc' introduced (thanks to Stephen Eglen).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
666 ;; Version 2.03
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
667 ;; - Figure*, table*, Sidewaysfigure/table added to default environments.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
668 ;; - `reftex-bibfile-ignore-list' introduced (thanks to Rory Molinari).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
669 ;; - New functions `reftex-arg-label', `reftex-arg-ref', `reftex-arg-cite'.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
670 ;; - Emacs/XEmacs compatibility reworked. XEmacs 19.15 now is required.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
671 ;; - `reftex-add-to-label-alist' (to be called from AUCTeX style files).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
672 ;; - Finding context with a hook function.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
673 ;; - Sorting BibTeX entries (new variable: `reftex-sort-bibtex-matches').
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
674 ;; Version 2.05
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
675 ;; - Support for `custom.el'.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
676 ;; - New function `reftex-grep-document' (thanks to Stephen Eglen).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
677 ;; Version 2.07
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
678 ;; - New functions `reftex-search-document', `reftex-query-replace-document'
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
679 ;; Version 2.11
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
680 ;; - Submitted for inclusion to Emacs and XEmacs.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
681 ;; Version 2.14
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
682 ;; - Variable `reftex-plug-into-AUCTeX' simplifies cooperation with AUCTeX.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
683 ;; Version 2.17
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
684 ;; - Label prefix expands % escapes with current file name and other stuff.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
685 ;; - Citation format now with % escapes. This is not backward compatible!
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
686 ;; - TEXINPUTS variable recognized when looking for input files.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
687 ;; - Context can be the nth argument of a macro.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
688 ;; - Searching in the select buffer is now possible (C-s and C-r).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
689 ;; - Display and derive-label can use two different context methods.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
690 ;; - AMSmath xalignat and xxalignat added.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
691 ;; - THIS IS THE VERSION DISTRIBUTED WITH EMACS 20.1 and 20.2
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
692 ;; Version 3.00
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
693 ;; - RefTeX should work better for very large projects:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
694 ;; - The new parser works without creating a master buffer.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
695 ;; - Rescanning can be limited to a part of a multifile document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
696 ;; - Information from the parser can be stored in a file.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
697 ;; - RefTeX can deal with macros having a naked label as an argument.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
698 ;; - Macros may have white space and newlines between arguments.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
699 ;; - Multiple identical section headings no longer confuse `reftex-toc'.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
700 ;; - RefTeX should work correctly in combination with buffer-altering
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
701 ;; packages like outline, folding, x-symbol, iso-cvt, isotex, etc.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
702 ;; - All labeled environments discussed in `The LaTeX Companion' by
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
703 ;; Goossens, Mittelbach & Samarin, Addison-Wesley 1994) are part of
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
704 ;; RefTeX's defaults.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
705 ;; Version 3.03
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
706 ;; - Support for the LaTeX package `xr', for inter-document references.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
707 ;; - A few (minor) Mule-related changes.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
708 ;; - Fixed bug which could cause HUGE .rel files.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
709 ;; - Search for input and .bib files with recursive path definitions.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
710 ;; Version 3.04
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
711 ;; - Fixed BUG in the `xr' support.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
712 ;; Version 3.05
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
713 ;; - Compatibility code now first checks for XEmacs feature.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
714 ;; Version 3.07
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
715 ;; - `Ref' menu improved.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
716 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
717 ;;
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
718 ;;;;;;
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
719
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
720 ;;; Code:
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
721
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
722 (eval-when-compile (require 'cl))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
723
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
724 ;; Stuff that needs to be there when we use defcustom
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
725 ;; --------------------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
726
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
727 (require 'custom)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
728
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
729 (defvar reftex-tables-dirty t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
730 "Flag showing if tables need to be re-computed.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
731
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
732 (eval-and-compile
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
733 (defun reftex-set-dirty (symbol value)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
734 (setq reftex-tables-dirty t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
735 (set symbol value)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
736
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
737 (eval-and-compile
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
738 (defmacro reftex-fp (n)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
739 (if (fboundp 'forward-point)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
740 (list 'forward-point n)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
741 (list '+ '(point) n))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
742
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
743 ;;; Begin of Configuration Section ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
744
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
745 ;; Define the two constants which are needed during compilation
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
746
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
747 (eval-and-compile
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
748 (defconst reftex-label-alist-builtin
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
749 '(
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
750 ;; Some aliases, mostly for backward compatibility
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
751 (Sideways "Alias for -->rotating" (rotating))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
752 (AMSTeX "amsmath with eqref macro"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
753 ((nil ?e nil "~\\eqref{%s}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
754 amsmath))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
755
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
756 ;; Individual package defaults
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
757 (amsmath "AMS-LaTeX math environments"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
758 (("align" ?e nil nil eqnarray-like)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
759 ("gather" ?e nil nil eqnarray-like)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
760 ("multline" ?e nil nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
761 ("flalign" ?e nil nil eqnarray-like)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
762 ("alignat" ?e nil nil alignat-like)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
763 ("xalignat" ?e nil nil alignat-like)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
764 ("xxalignat" ?e nil nil alignat-like)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
765 ("subequations" ?e nil nil t)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
766
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
767 (endnotes "The \\endnote macro"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
768 (("\\endnote[]{}" ?n nil nil 2 ("Endnote"))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
769
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
770 (fancybox "The Beqnarray environment"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
771 (("Beqnarray" ?e nil nil eqnarray-like)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
772
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
773 (floatfig "The floatingfigure environment"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
774 (("floatingfigure" ?f nil nil caption)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
775
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
776 (longtable "The longtable environment"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
777 (("longtable" ?t nil nil caption)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
778
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
779 (picinpar "The figwindow and tabwindow environments"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
780 (("figwindow" ?f nil nil 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
781 ("tabwindow" ?f nil nil 1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
782
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
783 (rotating "Sidewaysfigure and table"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
784 (("sidewaysfigure" ?f nil nil caption)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
785 ("sidewaystable" ?t nil nil caption)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
786
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
787 (subfigure "Subfigure environments/macro"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
788 (("subfigure" ?f nil nil caption)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
789 ("subfigure*" ?f nil nil caption)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
790 ("\\subfigure[]{}" ?f nil nil 1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
791
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
792 (supertab "Supertabular environment"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
793 (("supertabular" ?t nil nil "\\tablecaption{")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
794
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
795 (wrapfig "The wrapfigure environment"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
796 (("wrapfigure" ?f nil nil caption)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
797
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
798 ;; The LaTeX core stuff
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
799 (LaTeX "LaTeX default environments"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
800 (("section" ?s "sec:" "~\\ref{%s}" (nil . t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
801 ("Part" "Chapter" "Chap." "Section" "Sec." "Sect." "Paragraph" "Par."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
802 "\\S" "Teil" "Kapitel" "Kap." "Abschnitt" ))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
803
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
804 ("enumerate" ?i "item:" "~\\ref{%s}" item
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
805 ("Item" "Punkt"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
806
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
807 ("equation" ?e "eq:" "~(\\ref{%s})" t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
808 ("Equation" "Eq." "Eqn." "Gleichung" "Gl."))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
809 ("eqnarray" ?e "eq:" nil eqnarray-like)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
810
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
811 ("figure" ?f "fig:" "~\\ref{%s}" caption
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
812 ("Figure" "Fig." "Abbildung" "Abb."))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
813 ("figure*" ?f nil nil caption)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
814
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
815 ("table" ?t "tab:" "~\\ref{%s}" caption
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
816 ("Table" "Tab." "Tabelle"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
817 ("table*" ?t nil nil caption)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
818
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
819 ("\\footnote[]{}" ?n "note:" "~\\ref{%s}" 2
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
820 ("Footnote" "Note"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
821
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
822 ("any" ?\ " " "\\ref{%s}" nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
823
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
824 )
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
825 "The default label environment descriptions.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
826 Lower-case symbols correspond to a style file of the same name in the LaTeX
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
827 distribution. Mixed-case symbols are convenience aliases.")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
828
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
829 (defconst reftex-cite-format-builtin
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
830 '(
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
831 (default "Default macro \\cite{%l}"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
832 "\\cite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
833 (natbib "The Natbib package"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
834 ((?\C-m . "\\cite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
835 (?t . "\\citet{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
836 (?T . "\\citet*{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
837 (?p . "\\citep{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
838 (?P . "\\citep*{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
839 (?e . "\\citep[e.g.][]{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
840 (?a . "\\citeauthor{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
841 (?y . "\\citeyear{%l}")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
842 (harvard "The Harvard package"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
843 ((?\C-m . "\\cite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
844 (?p . "\\cite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
845 (?t . "\\citeasnoun{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
846 (?n . "\\citeasnoun{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
847 (?s . "\\possessivecite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
848 (?e . "\\citeaffixed{%l}{?}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
849 (?y . "\\citeyear{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
850 (?a . "\\citename{%l}")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
851 (chicago "The Chicago package"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
852 ((?\C-m . "\\cite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
853 (?t . "\\citeN{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
854 (?T . "\\shortciteN{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
855 (?p . "\\cite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
856 (?P . "\\shortcite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
857 (?a . "\\citeA{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
858 (?A . "\\shortciteA{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
859 (?y . "\\citeyear{key}")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
860 (astron "The Astron package"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
861 ((?\C-m . "\\cite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
862 (?p . "\\cite{%l}" )
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
863 (?t . "%2a (\\cite{%l})")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
864 (author-year "Do-it-yourself Author-year"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
865 ((?\C-m . "\\cite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
866 (?t . "%2a (%y)\\nocite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
867 (?p . "(%2a %y\\nocite{%l})")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
868 (locally "Full info in parenthesis"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
869 "(%2a %y, %j %v, %P, %e: %b, %u, %s %<)")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
870 ;; undocumented feature: `%<' kills white space and punctuation locally.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
871 )
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
872 "Builtin versions of for the citation format.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
873 The following conventions are valid for all alist entries:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
874 `?\C-m' should always point to a straight \\cite{%l} macro.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
875 `?t' should point to a textual citation (citation as a noun).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
876 `?p' should point to a parenthetical citation.")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
877 )
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
878
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
879 ;; Configuration Variables and User Options for RefTeX ------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
880
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
881 (defgroup reftex nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
882 "LaTeX label and citation support."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
883 :tag "RefTeX"
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
884 :link '(url-link :tag "Home Page"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
885 "http://strw.leidenuniv.nl/~dominik/Tools/")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
886 :link '(emacs-commentary-link :tag "Commentary in reftex.el" "reftex.el")
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
887 :prefix "reftex-"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
888 :group 'tex)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
889
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
890 (defun reftex-customize ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
891 "Call the customize function with reftex as argument."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
892 (interactive)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
893 ;; Depending on the customize version we can call different functions.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
894 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
895 ((fboundp 'customize-browse)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
896 (customize-browse 'reftex))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
897 ((fboundp 'customize-group)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
898 (customize-group 'reftex))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
899 ((fboundp 'customize)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
900 (customize 'reftex))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
901 (t (error "Custom.el not available"))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
902
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
903 (defun reftex-show-commentary ()
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
904 "Use the finder to view the file documentation from `reftex.el'."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
905 (interactive)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
906 (require 'finder)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
907 (finder-commentary "reftex.el"))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
908
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
909 ;; Support for \label and \ref --------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
910
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
911 (defgroup reftex-label-support nil
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
912 "Support for creation, insertion and referencing of labels in LaTeX."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
913 :group 'reftex)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
914
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
915 (defgroup reftex-defining-label-environments nil
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
916 "Definition of environments and macros to do with label."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
917 :group 'reftex-label-support)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
918
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
919 ;; Make a constant for the customization stuff
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
920 (eval-and-compile
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
921 (defconst reftex-tmp
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
922 '((const :tag "Default position" t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
923 (const :tag "After label" nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
924 (number :tag "Macro arg nr" 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
925 (regexp :tag "Regexp" "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
926 (const :tag "Caption in float" caption)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
927 (const :tag "Item in list" item)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
928 (const :tag "Eqnarray-like" eqnarray-like)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
929 (const :tag "Alignat-like" alignat-like)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
930 (symbol :tag "Function" my-func))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
931
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
932 (defcustom reftex-default-label-alist-entries
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
933 '(amsmath endnotes fancybox floatfig longtable picinpar
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
934 rotating subfigure supertab wrapfig LaTeX)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
935 "Default label alist specifications. LaTeX should be the last entry.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
936 This list describes the default label environments RefTeX should always use.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
937 It is probably a mistake to remove the LaTeX symbol from this list.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
938
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
939 The options include:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
940 LaTeX The standard LaTeX environments.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
941 Sideways The sidewaysfigure and sidewaystable environments.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
942 AMSTeX The math environments in the AMS-LaTeX amsmath package.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
943
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
944 For the full list of options, try
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
945
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
946 M-x customize-variable RET reftex-default-label-alist-entries RET."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
947 :group 'reftex-defining-label-environments
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
948 :set 'reftex-set-dirty
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
949 :type `(set
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
950 :indent 4
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
951 :inline t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
952 :greedy t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
953 ,@(mapcar
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
954 (function
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
955 (lambda (x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
956 (list 'const ':tag (concat (symbol-name (nth 0 x))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
957 ": " (nth 1 x))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
958 (nth 0 x))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
959 reftex-label-alist-builtin)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
960
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
961 (defcustom reftex-label-alist nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
962 "Alist with information on environments for \\label-\\ref use.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
963
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
964 This docstring is easier to understand after reading the configuration
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
965 examples in `reftex.el'. Looking at the builtin defaults in the constant
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
966 `reftex-label-alist-builtin' may also be instructive.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
967
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
968 Set this variable to define additions and changes to the default. The only
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
969 things you MUST NOT change is that `?s' is the type indicator for section
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
970 labels, and SPC for the `any' label type. These are hard-coded at other
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
971 places in the code.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
972
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
973 Each list entry describes either an environment carrying a counter for use
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
974 with \\label and \\ref, or a LaTeX macro defining a label as (or inside)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
975 one of its arguments. The elements of each list entry are:
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
976
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
977 0. Name of the environment (like \"table\") or macro (like \"\\\\myfig\").
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
978 For macros, indicate the macro arguments for best results, as in
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
979 \"\\\\myfig[]{}{}{*}{}\". Use square brackets for optional arguments,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
980 a star to mark the label argument, if any. The macro does not have to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
981 have a label argument - you could also use \\label{..} inside one of
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
982 its arguments.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
983 Special names: `section' for section labels, `any' to define a group
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
984 which contains all labels.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
985 This may also be nil if the entry is only meant to change some settings
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
986 associated with the type indicator character (see below).
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
987
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
988 1. Type indicator character, like `?t', must be a printable ASCII character.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
989 The type indicator is a single character which defines a label type.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
990 Any label inside the environment or macro is assumed to belong to this
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
991 type. The same character may occur several times in this list, to cover
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
992 cases in which different environments carry the same label type (like
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
993 `equation' and `eqnarray').
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
994
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
995 2. Label prefix string, like \"tab:\".
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
996 The prefix is a short string used as the start of a label. It may be the
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
997 empty string. The prefix may contain the following `%' escapes:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
998 %f Current file name with directory and extension stripped.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
999 %F Current file name relative to directory of master file.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1000 %u User login name, on systems which support this.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1001
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1002 Example: In a file `intro.tex', \"eq:%f:\" will become \"eq:intro:\").
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1003
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1004 3. Format string for reference insert in buffer. `%s' will be replaced by
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1005 the label.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1006 When the format starts with `~', whitespace before point will be removed
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1007 so that the reference cannot be separated from the word before it.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1008
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1009 4. Indication on how to find the short context.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1010 - If nil, use the text following the \\label{...} macro.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1011 - If t, use
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1012 - the section heading for section labels.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1013 - text following the \\begin{...} statement of environments.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1014 (not a good choice for environments like eqnarray or enumerate,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1015 where one has several labels in a single environment).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1016 - text after the macro name (stearting with the first arg) for macros.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1017 - If an integer, use the nth argument of the macro. As a special case,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1018 1000 means to get text after the last macro argument.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1019 - If a string, use as regexp to search *backward* from the label. Context
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1020 is then the text following the end of the match. E.g. putting this to
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1021 \"\\\\\\\\caption[[{]\" will use the caption in a figure or table
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1022 environment.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1023 \"\\\\\\\\begin{eqnarray}\\\\|\\\\\\\\\\\\\\\\\" works for eqnarrays.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1024 - If any of `caption', `item', `eqnarray-like', `alignat-like', this
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1025 symbol will internally be translated into an appropriate regexp
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1026 (see also the variable `reftex-default-context-regexps').
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1027 - If a function, call this function with the name of the environment/macro
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1028 as argument. On call, point will be just after the \\label macro. The
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1029 function is expected to return a suitable context string. It should
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1030 throw an exception (error) when failing to find context.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1031 As an example, here is a function returning the 10 chars following
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1032 the label macro as context:
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1033
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1034 (defun my-context-function (env-or-mac)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1035 (if (> (point-max) (+ 10 (point)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1036 (buffer-substring (point) (+ 10 (point)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1037 (error \"Buffer too small\")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1038
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1039 Label context is used in two ways by RefTeX: For display in the label
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1040 menu, and to derive a label string. If you want to use a different
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1041 method for each of these, specify them as a dotted pair.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1042 E.g. `(nil . t)' uses the text after the label (nil) for display, and
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1043 text from the default position (t) to derive a label string. This is
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1044 actually used for section labels.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1045
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1046 Setting the variable `reftex-use-text-after-label-as-context' to t
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1047 overrides the setting here.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1048
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1049 5. List of magic words which identify a reference to be of this type.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1050 If the word before point is equal to one of these words when calling
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1051 `reftex-reference', the label list offered will be automatically
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1052 restricted to labels of the correct type.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1053
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1054 If the type indicator characters of two or more entries are the same, RefTeX
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1055 will use
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1056 - the first non-nil format and prefix
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1057 - the magic words of all involved entries.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1058
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1059 Any list entry may also be a symbol. If that has an association in
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1060 `reftex-label-alist-builtin', the cdr of that association is spliced into the
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1061 list. However, builtin defaults should normally be set here but with the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1062 variable `reftex-default-label-alist-entries."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1063 :group 'reftex-defining-label-environments
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1064 :set 'reftex-set-dirty
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1065 :type
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1066 `(repeat
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1067 (choice
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1068 :value ("" ?a nil nil nil nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1069 (list :tag "Detailed label alist entry"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1070 :value ("" ?a nil nil nil nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1071 (choice :tag "Environment or \\macro "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1072 (const :tag "Ignore, just use typekey" nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1073 (string ""))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1074 (character :tag "Typekey character " ?a)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1075 (choice :tag "Label prefix string "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1076 (const :tag "Default" nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1077 (string :tag "String" "lab:"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1078 (choice :tag "Label reference format"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1079 (const :tag "Default" nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1080 (string :tag "String" "~\\ref{%s}"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1081 (choice :tag "Context"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1082 (choice
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1083 :tag "1 method"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1084 ,@reftex-tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1085 (cons :tag "Split methods"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1086 (choice
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1087 :tag " Display context "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1088 ,@reftex-tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1089 (choice
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1090 :tag " Derive label context"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1091 ,@reftex-tmp)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1092 (repeat :tag "List of Magic Words" (string)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1093 (choice
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1094 :tag "Package"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1095 :value AMSTeX
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1096 ,@(mapcar
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1097 (function
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1098 (lambda (x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1099 (list 'const ':tag (concat (symbol-name (nth 0 x))); ": " (nth 1 x))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1100 (nth 0 x))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1101 reftex-label-alist-builtin)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1102
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1103 ;; LaTeX section commands and level numbers
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1104 (defcustom reftex-section-levels
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1105 '(
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1106 ("part" . 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1107 ("chapter" . 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1108 ("section" . 2)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1109 ("subsection" . 3)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1110 ("subsubsection" . 4)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1111 ("paragraph" . 5)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1112 ("subparagraph" . 6)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1113 ("subsubparagraph" . 7)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1114 )
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1115 "Commands and levels used for defining sections in the document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1116 The car of each cons cell is the name of the section macro. The cdr is a
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1117 number indicating its level."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1118 :group 'reftex-defining-label-environments
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1119 :set 'reftex-set-dirty
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1120 :type '(repeat
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1121 (cons (string :tag "sectioning macro" "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1122 (number :tag "level " 0))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1123
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1124 (defcustom reftex-default-context-regexps
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1125 '((caption . "\\\\\\(rot\\)?caption\\*?[[{]")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1126 (item . "\\\\item\\(\\[[^]]*\\]\\)?")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1127 (eqnarray-like . "\\\\begin{%s}\\|\\\\\\\\")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1128 (alignat-like . "\\\\begin{%s}{[0-9]*}\\|\\\\\\\\"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1129 "Alist with default regular expressions for finding context.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1130 The form (format regexp (regexp-quote environment)) is used to calculate
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1131 the final regular expression - so %s will be replaced with the environment
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1132 or macro."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1133 :group 'reftex-defining-label-environments
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1134 :type '(repeat (cons (symbol) (regexp))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1135
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1136 (defcustom reftex-use-text-after-label-as-context nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1137 "*t means, grab context from directly after the \\label{..} macro.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1138 This is the fastest method for obtaining context of the label definition, but
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1139 requires discipline when placing labels. Setting this variable to t takes
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1140 precedence over the individual settings in `reftex-label-alist'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1141 This variable may be set to t, nil, or a string of label type letters
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1142 indicating the label types for which it should be true."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1143 :group 'reftex-defining-label-environments
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1144 :set 'reftex-set-dirty
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1145 :type '(choice
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1146 (const :tag "on" t) (const :tag "off" nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1147 (string :tag "Selected label types")))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1148
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1149 ;; Label insertion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1150
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1151 (defgroup reftex-making-and-inserting-labels nil
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1152 "Options on how to create new labels."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1153 :group 'reftex-label-support)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1154
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1155 (defcustom reftex-insert-label-flags '("s" "sft")
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1156 "Flags governing label insertion. First flag DERIVE, second flag PROMPT.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1157
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1158 If DERIVE is t, RefTeX will try to derive a sensible label from context.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1159 A section label for example will be derived from the section heading.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1160 The conversion of the context to a legal label is governed by the
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1161 specifications given in `reftex-derive-label-parameters'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1162 If RefTeX fails to derive a label, it will prompt the user.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1163 If DERIVE is nil, the label generated will consist of the prefix and a
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1164 unique number, like `eq:23'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1165
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1166 If PROMPT is t, the user will be prompted for a label string. The prompt will
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1167 already contain the prefix, and (if DERIVE is t) a default label derived from
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1168 context. When PROMPT is nil, the default label will be inserted without
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1169 query.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1170
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1171 So the combination of DERIVE and PROMPT controls label insertion. Here is a
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1172 table describing all four possibilities:
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1173
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1174 DERIVE PROMPT ACTION
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1175 -------------------------------------------------------------------------
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1176 nil nil Insert simple label, like eq:22 or sec:13. No query.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1177 nil t Prompt for label.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1178 t nil Derive a label from context and insert without query.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1179 t t Derive a label from context and prompt for confirmation.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1180
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1181 Each flag may be set to t, nil, or a string of label type letters
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1182 indicating the label types for which it should be true.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1183 Thus, the combination may be set differently for each label type. The
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1184 default settings \"s\" and \"sft\" mean: Derive section labels from headings
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1185 (with confirmation). Prompt for figure and table labels. Use simple labels
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1186 without confirmation for everything else."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1187 :group 'reftex-making-and-inserting-labels
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1188 :type '(list (choice :tag "Derive label from context"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1189 (const :tag "always" t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1190 (const :tag "never" nil)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1191 (string :tag "selected label types" ""))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1192 (choice :tag "Prompt for label string "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1193 :entry-format " %b %v"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1194 (const :tag "always" t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1195 (const :tag "never" nil)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1196 (string :tag "selected label types" ""))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1197
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1198 (defcustom reftex-derive-label-parameters '(3 20 t 1 "-"
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1199 ("the" "on" "in" "off" "a" "for" "by" "of" "and" "is"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1200 "Parameters for converting a string into a label.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1201 NWORDS Number of words to use.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1202 MAXCHAR Maximum number of characters in a label string.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1203 ILLEGAL nil: Throw away any words containing characters illegal in labels.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1204 t: Throw away only the illegal characters, not the whole word.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1205 ABBREV nil: Never abbreviate words.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1206 t: Always abbreviate words (see `reftex-abbrev-parameters').
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1207 not t and not nil: Abbreviate words if necessary to shorten
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1208 label string below MAXCHAR.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1209 SEPARATOR String separating different words in the label.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1210 IGNOREWORDS List of words which should not be part of labels."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1211 :group 'reftex-making-and-inserting-labels
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1212 :type '(list (integer :tag "Number of words " 3)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1213 (integer :tag "Maximum label length " 20)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1214 (choice :tag "Illegal characters in words"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1215 (const :tag "throw away entire word" nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1216 (const :tag "throw away single chars" t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1217 (choice :tag "Abbreviate words "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1218 (const :tag "never" nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1219 (const :tag "always" t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1220 (const :tag "when label is too long" 1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1221 (string :tag "Separator between words " "-")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1222 (repeat :tag "Ignore words"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1223 :entry-format " %i %d %v"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1224 (string :tag ""))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1225
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1226 (defcustom reftex-label-illegal-re "[\000-\040\177-\377\\\\#$%&~^_{}]"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1227 "Regexp matching characters not legal in labels.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1228 For historic reasons, this character class comes *with* the [] brackets."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1229 :group 'reftex-making-and-inserting-labels
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1230 :type '(regexp :tag "Character class"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1231
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1232 (defcustom reftex-abbrev-parameters '(4 2 "^saeiou" "aeiou")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1233 "Parameters for abbreviation of words.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1234 MIN-CHARS Minimum number of characters remaining after abbreviation.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1235 MIN-KILL Minimum number of characters to remove when abbreviating words.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1236 BEFORE Character class before abbrev point in word.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1237 AFTER Character class after abbrev point in word."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1238 :group 'reftex-making-and-inserting-labels
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1239 :type '(list
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1240 (integer :tag "Minimum chars per word" 4)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1241 (integer :tag "Shorten by at least " 2)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1242 (string :tag "cut before char class " "^saeiou")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1243 (string :tag "cut after char class " "aeiou")))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1244
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1245 ;; Label referencing
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1246
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1247 (defgroup reftex-referencing-labels nil
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1248 "Options on how to reference labels."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1249 :group 'reftex-label-support)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1250
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1251 (eval-and-compile
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1252 (defconst reftex-tmp
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1253 '((const :tag "on" t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1254 (const :tag "off" nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1255 (string :tag "Selected label types"))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1256
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1257 (defcustom reftex-label-menu-flags '(t t nil nil nil nil t nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1258 "List of flags governing the label menu makeup.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1259 The flags are:
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1260
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1261 TABLE-OF-CONTENTS Show the labels embedded in a table of context.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1262 SECTION-NUMBERS Include section numbers (like 4.1.3) in table of contents.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1263 COUNTERS Show counters. This just numbers the labels in the menu.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1264 NO-CONTEXT Non-nil means do NOT show the short context.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1265 FOLLOW Follow full context in other window.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1266 SHOW-COMMENTED Show labels from regions which are commented out.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1267 MATCH-IN-TOC Searches in label menu will also match in toc lines.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1268 SHOW FILES Show Begin and end of included files.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1269
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1270 Each of these flags can be set to t or nil, or to a string of type letters
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1271 indicating the label types for which it should be true. These strings work
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1272 like character classes in regular expressions. Thus, setting one of the
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1273 flags to \"sf\" makes the flag true for section and figure labels, nil
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1274 for everything else. Setting it to \"^ft\" makes it the other way round.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1275
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1276 Most options can also be switched from the label menu itself - so if you
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1277 decide here to not have a table of contents in the label menu, you can still
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1278 get one interactively during selection from the label menu."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1279 :group 'reftex-referencing-labels
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1280 :type
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1281 `(list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1282 (choice :tag "Embed in table of contents " ,@reftex-tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1283 (choice :tag "Show section numbers " ,@reftex-tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1284 (choice :tag "Show individual counters " ,@reftex-tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1285 (choice :tag "Hide short context " ,@reftex-tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1286 (choice :tag "Follow context in other window " ,@reftex-tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1287 (choice :tag "Show commented labels " ,@reftex-tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1288 (choice :tag "Searches match in toc lines " ,@reftex-tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1289 (choice :tag "Show begin/end of included files" ,@reftex-tmp)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1290
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1291 (defcustom reftex-level-indent 2
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1292 "*Number of spaces to be used for indentation per section level."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1293 :group 'reftex-referencing-labels
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1294 :type '(integer))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1295
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1296 (defcustom reftex-refontify-context 1
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1297 "*Non-nil means, re-fontify the context in the label menu with font-lock.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1298 This slightly slows down the creation of the label menu. It is only necessay
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1299 when you definitely want the context fontified.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1300
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1301 This option may have 3 different values:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1302 nil Never refontify.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1303 t Always refontify.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1304 1 Refontify when absolutly necessary, e.g. when with the x-symbol package.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1305 The option is ignored when `reftex-use-fonts' is nil."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1306 :group 'reftex-referencing-labels
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1307 :type '(choice
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1308 (const :tag "Never" nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1309 (const :tag "Always" t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1310 (const :tag "When necessary" 1)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1311
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1312 (defcustom reftex-guess-label-type t
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1313 "*Non-nil means, `reftex-reference' will try to guess the label type.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1314 To do that, RefTeX will look at the word before the cursor and compare it with
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1315 the words given in `reftex-label-alist'. When it finds a match, RefTeX will
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1316 immediately offer the correct label menu - otherwise it will prompt you for
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1317 a label type. If you set this variable to nil, RefTeX will always prompt."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1318 :group 'reftex-referencing-labels
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1319 :type '(boolean))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1320
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1321 ;; BibteX citation configuration ----------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1322
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1323 (defgroup reftex-citation-support nil
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1324 "Support for referencing bibliographic data with BibTeX."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1325 :group 'reftex)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1326
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1327 (defcustom reftex-bibpath-environment-variables '("BIBINPUTS" "TEXBIB")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1328 "*List of env vars which might contain the path to BibTeX database files."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1329 :group 'reftex-citation-support
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1330 :set 'reftex-set-dirty
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1331 :type '(repeat (string :tag "Environment variable")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1332
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1333 (defcustom reftex-bibfile-ignore-list nil
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1334 "*List of files in \\bibliography{..} RefTeX should *not* parse.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1335 The file names have to be in the exact same form as in the bibliography
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1336 macro - i.e. without the `.bib' extension.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1337 Intended for files which contain only `@string' macro definitions and the
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1338 like, which are ignored by RefTeX anyway."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1339 :group 'reftex-citation-support
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1340 :set 'reftex-set-dirty
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1341 :type '(repeat (string :tag "File name")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1342
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1343 (defcustom reftex-sort-bibtex-matches 'reverse-year
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1344 "*Sorting of the entries found in BibTeX databases by reftex-citation.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1345 Possible values:
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1346 nil Do not sort entries.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1347 'author Sort entries by author name.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1348 'year Sort entries by increasing year.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1349 'reverse-year Sort entries by decreasing year."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1350 :group 'reftex-citation-support
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1351 :type '(choice (const :tag "not" nil)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1352 (const :tag "by author" author)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1353 (const :tag "by year" year)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1354 (const :tag "by year, reversed" reverse-year)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1355
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1356 (defcustom reftex-cite-format 'default
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1357 "*The format of citations to be inserted into the buffer.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1358 It can be a string or an alist. In the simplest case this is just
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1359 the string \"\\cite{%l}\", which is also the default. See the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1360 definition of `reftex-cite-format-builtin' for more complex examples.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1361
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1362 If `reftex-cite-format' is a string, it will be used as the format.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1363 In the format, the following percent escapes will be expanded.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1364
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1365 %l The BibTeX label of the citation.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1366 %a List of author names, see also `reftex-cite-punctuation.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1367 %2a Like %a, but abbreviate more than 2 authors like Jones et al.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1368 %A First author name only.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1369 %e Works like %a, but on list of editor names. (%2e and %E work a well)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1370
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1371 It is also possible to access all other BibTeX database fields:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1372 %b booktitle %c chapter %d edition %h howpublished
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1373 %i institution %j journal %k key %m month
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1374 %n number %o organization %p pages %P first page
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1375 %r address %s school %u publisher %t title
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1376 %v volume %y year
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1377
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1378 Usually, only %l is needed. Try, however, (setq reftex-comment-citations t).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1379
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1380 If `reftex-cite-format' is an alist of characters and strings, the user
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1381 will be prompted for a character to select one of the possible format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1382 strings.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1383 In order to configure this variable, you can either set
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1384 `reftex-cite-format' directly yourself or set it to the SYMBOL of one of
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1385 the predefined styles (see `reftex-cite-format-builtin'). E.g.:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1386 (setq reftex-cite-format 'harvard)"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1387 :group 'reftex-citation-support
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1388 :type
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1389 `(choice
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1390 :format "%{%t%}: \n%[Value Menu%] %v"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1391 (radio :tag "Symbolic Builtins"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1392 :indent 4
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1393 :value default
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1394 ,@(mapcar
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1395 (function
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1396 (lambda (x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1397 (list 'const ':tag (concat (symbol-name (nth 0 x))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1398 ": " (nth 1 x))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1399 (nth 0 x))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1400 reftex-cite-format-builtin))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1401 (string :tag "format string" "\\cite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1402 (repeat :tag "key-ed format strings"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1403 :value ((?\r . "\\cite{%l}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1404 (?t . "\\cite{%l}") (?p . "\\cite{%l}"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1405 (cons (character :tag "Key character" ?\r)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1406 (string :tag "Format string" "")))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1407
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1408 (defcustom reftex-comment-citations nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1409 "*Non-nil means add a comment for each citation describing the full entry.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1410 The comment is formatted according to `reftex-cite-comment-format'."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1411 :group 'reftex-citation-support
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1412 :type '(boolean))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1413
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1414 (defcustom reftex-cite-comment-format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1415 "%% %2a %y, %j %v, %P, %e: %b, %u, %s %<\n"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1416 "Citation format used for commented citations. Must NOT contain %l."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1417 :group 'reftex-citation-support
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1418 :type '(string))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1419
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1420 (defcustom reftex-cite-punctuation '(", " " \\& " " {\\it et al.}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1421 "Punctuation for formatting of name lists in citations.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1422 This is a list of 3 strings.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1423 1. normal names separator, like \", \" in Jones, Brown and Miller
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1424 2. final names separator, like \" and \" in Jones, Brown and Miller
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1425 3. The \"et al\" string, like \" {...}\" in Jones {\\it et al.}"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1426 :group 'reftex-citation-support
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1427 :type '(list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1428 (string :tag "Separator for names ")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1429 (string :tag "Separator for last name in list")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1430 (string :tag "string used as et al. ")))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1431
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1432 ;; Table of contents configuration --------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1433
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1434 (defgroup reftex-table-of-contents-browser nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1435 "A multifile table of contents browser."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1436 :group 'reftex)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1437
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1438 (defcustom reftex-toc-follow-mode nil
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1439 "*Non-nil means, point in *toc* buffer will cause other window to follow.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1440 The other window will show the corresponding part of the document.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1441 This flag can be toggled from within the *toc* buffer with the `f' key."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1442 :group 'reftex-table-of-contents-browser
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1443 :type '(boolean))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1444
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1445 ;; Tuning the parser ----------------------------------------------------
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1446
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1447 (defgroup reftex-optimizations-for-large-documents nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1448 "Configuration of parser speed and memory usage."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1449 :group 'reftex)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1450
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1451 (defcustom reftex-keep-temporary-buffers 1
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1452 "*Non-nil means, keep buffers created for parsing and lookup.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1453 RefTeX sometimes needs to visit files related to the current document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1454 We distinguish files visited for
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1455 PARSING: Parts of a multifile document loaded when (re)-parsing the document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1456 LOOKUP: BibTeX database files and TeX files loaded to find a reference,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1457 to display label context, etc.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1458 The created buffers can be kept for later use, or be thrown away immediately
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1459 after use, depending on the value of this variable:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1460
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1461 nil Throw away as much as possible.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1462 t Keep everything.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1463 1 Throw away buffers created for parsing, but keep the ones created
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1464 for lookup.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1465
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1466 If a buffer is to be kept, the file is visited normally (which is potentially
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1467 slow but will happen only once).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1468 If a buffer is to be thrown away, the initialization of the buffer depends
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1469 upon the variable `reftex-initialize-temporary-buffers'."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1470 :group 'reftex-miscellaneous-configurations
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1471 :type '(choice
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1472 (const :tag "Throw away everything" nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1473 (const :tag "Keep everything" t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1474 (const :tag "Keep lookup buffers only" 1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1475
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1476 (defcustom reftex-initialize-temporary-buffers nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1477 "*Non-nil means do initializations even when visiting file temporarily.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1478 When nil, RefTeX may turn off find-file hooks and other stuff to briefly
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1479 visit a file.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1480 When t, the full default initializations are done (find-file-hook etc.).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1481 Instead of t or nil, this variable may also be a list of hook functions to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1482 do a minimal initialization."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1483 :group 'reftex-miscellaneous-configurations
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1484 :type '(choice
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1485 (const :tag "Read files literally" nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1486 (const :tag "Fully initialize buffers" t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1487 (repeat :tag "Hook functions" :value (nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1488 (function-item))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1489
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1490 (defcustom reftex-enable-partial-scans nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1491 "*Non-nil means, re-parse only 1 file when asked to re-parse.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1492 Re-parsing is normally requested with a `C-u' prefix to many RefTeX commands,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1493 or with the `r' key in menus. When this option is t in a multifile document,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1494 we will only parse the current buffer, or the file associated with the label
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1495 or section heading near point in a menu. Requesting re-parsing of an entire
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1496 multifile document then requires a `C-u C-u' prefix or the capital `R' key
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1497 in menus."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1498 :group 'reftex-optimizations-for-large-documents
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1499 :type 'boolean)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1500
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1501 (defcustom reftex-save-parse-info nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1502 "*Non-nil means, save information gathered with parsing in a file.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1503 The file MASTER.rel in the same directory as MASTER.tex is used to save the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1504 information. When this variable is t,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1505 - accessing the parsing information for the first time in an editing session
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1506 will read that file (if available) instead of parsing the document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1507 - each time (part of) the document is rescanned, a new version of the file
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1508 is written."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1509 :group 'reftex-optimizations-for-large-documents
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1510 :type 'boolean)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1511
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1512 ;; Miscellaneous configurations -----------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1513
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1514 (defgroup reftex-miscellaneous-configurations nil
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1515 "Collection of further configurations."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1516 :group 'reftex)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1517
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1518 (defcustom reftex-extra-bindings nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1519 "Non-nil means, make additional key bindings on startup.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1520 These extra bindings are located in the users `C-c letter' map."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1521 :group 'reftex-miscellaneous-configurations
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1522 :type '(boolean))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1523
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1524 (defcustom reftex-plug-into-AUCTeX nil
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1525 "*Plug-in flags for AUCTeX interface.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1526 This variable is a list of 4 boolean flags. When a flag is non-nil, it
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1527 means:
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1528
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1529 Flag 1: use `reftex-label' as `LaTeX-label-function'.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1530 Flag 2: use `reftex-arg-label' as `TeX-arg-label'
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1531 Flag 3: use `reftex-arg-ref' as `TeX-arg-ref'
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1532 Flag 4: use `reftex-arg-cite' as `TeX-arg-cite'
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1533
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1534 You may also set the variable itself to t or nil in order to turn all
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1535 plug-ins on or off, respectively.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1536 \\<LaTeX-mode-map>`LaTeX-label-function' is the function used for label insertion when you
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1537 enter a new environment in AUCTeX with \\[LaTeX-environment].
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1538 The `TeX-arg-label' etc. functions are for entering macro arguments during
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1539 macro insertion with \\[TeX-insert-macro].
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1540 See the AUCTeX documentation for more information.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1541 RefTeX uses `fset' to take over the function calls. Changing the variable
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1542 may require a restart of Emacs in order to become effective."
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1543 :group 'reftex-miscellaneous-configurations
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1544 :type '(choice (const :tag "No plug-ins" nil)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1545 (const :tag "All possible plug-ins" t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1546 (list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1547 :tag "Individual choice"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1548 :value (nil nil nil nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1549 (boolean :tag "Use reftex-label as LaTeX-label-function")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1550 (boolean :tag "Use reftex-arg-label as TeX-arg-label ")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1551 (boolean :tag "Use reftex-arg-ref as TeX-arg-ref ")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1552 (boolean :tag "Use reftex-arg-cite as TeX-arg-cite ")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1553 )))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1554
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1555 (defcustom reftex-use-fonts t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1556 "*Non-nil means, use fonts in label menu and on-the-fly help.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1557 Font-lock must be loaded as well to actually get fontified display."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1558 :group 'reftex-miscellaneous-configurations
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1559 :type '(boolean))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1560
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1561 (defcustom reftex-auto-show-entry 'copy
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1562 "*Non-nil means, do something when context in other window is hidden.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1563 Some modes like `outline-mode' or `folding-mode' hide parts of buffers.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1564 When RefTeX is asked to show context for a label definition, and the context
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1565 is invisible, it can unhide that section permanently (value t), or copy the
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1566 context to a temporary buffer (value 'copy)."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1567 :group 'reftex-miscellaneous-configurations
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1568 :type '(radio :value copy
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1569 :indent 4
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1570 (const :tag "Do nothing" nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1571 (const :tag "Unhide section permanently" t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1572 (const :tag "Copy context to show" copy)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1573
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1574 (defcustom reftex-load-hook nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1575 "Hook which is being run when loading reftex.el."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1576 :group 'reftex-miscellaneous-configurations
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1577 :type 'hook)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1578
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1579 (defcustom reftex-mode-hook nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1580 "Hook which is being run when turning on RefTeX mode."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1581 :group 'reftex-miscellaneous-configurations
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1582 :type 'hook)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1583
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1584 ;;; End of Configuration Section ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1585
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1586 ;;;===========================================================================
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1587 ;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1588 ;;; Define the formal stuff for a minor mode named RefTeX.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1589 ;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1590
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1591 (defconst reftex-version "RefTeX version 3.7"
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1592 "Version string for RefTeX.")
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1593
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1594 (defvar reftex-mode nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1595 "Determines if RefTeX minor mode is active.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1596 (make-variable-buffer-local 'reftex-mode)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1597
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1598 (defvar reftex-mode-map (make-sparse-keymap)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1599 "Keymap for RefTeX minor mode.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1600
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1601 (defvar reftex-mode-menu nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1602
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1603 ;;;###autoload
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1604 (defun turn-on-reftex ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1605 "Turn on RefTeX minor mode."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1606 (reftex-mode t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1607
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1608 ;;;###autoload
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1609 (defun reftex-mode (&optional arg)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1610 "Minor mode with distinct support for \\label, \\ref and \\cite in LaTeX.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1611
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1612 Labels can be created with `\\[reftex-label]' and referenced with `\\[reftex-reference]'.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1613 When referencing, you get a menu with all labels of a given type and
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1614 context of the label definition. The selected label is inserted as a
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1615 \\ref macro.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1616
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1617 Citations can be made with `\\[reftex-citation]' which will use a regular expression
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1618 to pull out a *formatted* list of articles from your BibTeX
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1619 database. The selected citation is inserted as a \\cite macro.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1620
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1621 A Table of Contents of the entire (multifile) document with browsing
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1622 capabilities is available with `\\[reftex-toc]'.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1623
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1624 Most command have help available on the fly. This help is accessed by
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1625 pressing `?' to any prompt mentioning this feature.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1626
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1627 Extensive documentation about RefTeX is in the file header of `reftex.el'.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1628 You can view this information with `\\[reftex-show-commentary]'.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1629
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1630 \\{reftex-mode-map}
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1631 Under X, these and other functions will also be available as `Ref' menu
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1632 on the menu bar.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1633
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1634 ------------------------------------------------------------------------------"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1635
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1636 (interactive "P")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1637 (setq reftex-mode (not (or (and (null arg) reftex-mode)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1638 (<= (prefix-numeric-value arg) 0))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1639
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1640 ; Add or remove the menu, and run the hook
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1641 (if reftex-mode
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1642 (progn
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1643 (easy-menu-add reftex-mode-menu)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1644 (reftex-plug-into-AUCTeX)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1645 (run-hooks 'reftex-mode-hook))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1646 (easy-menu-remove reftex-mode-menu)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1647
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1648 (or (assoc 'reftex-mode minor-mode-alist)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1649 (push '(reftex-mode " Ref") minor-mode-alist))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1650
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1651 (or (assoc 'reftex-mode minor-mode-map-alist)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1652 (push (cons 'reftex-mode reftex-mode-map) minor-mode-map-alist))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1653
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1654 ;;; ===========================================================================
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1655 ;;;
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1656 ;;; Silence warnings about variables in other packages.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1657 (defvar TeX-master)
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1658 (defvar LaTeX-label-function)
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1659 (defvar tex-main-file)
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1660 (defvar outline-minor-mode)
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1661
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1662 ;;; ===========================================================================
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1663 ;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1664 ;;; Interfaces for other packages
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1665 ;;; -----------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1666 ;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1667 ;;; AUCTeX
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1668 ;;; ------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1669
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1670 (defun reftex-arg-label (optional &optional prompt definition)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1671 "Use `reftex-label' to create label. Insert it with `TeX-argument-insert'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1672 This function is intended for AUCTeX macro support."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1673 (let ((label (reftex-label nil t)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1674 (if (and definition (not (string-equal "" label)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1675 (LaTeX-add-labels label))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1676 (TeX-argument-insert label optional optional)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1677
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1678 (defun reftex-arg-ref (optional &optional prompt definition)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1679 "Use `reftex-reference' to select label. Insert with `TeX-argument-insert'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1680 This function is intended for AUCTeX macro support."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1681 (let ((label (reftex-reference nil t)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1682 (if (and definition (not (string-equal "" label)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1683 (LaTeX-add-labels label))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1684 (TeX-argument-insert label optional optional)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1685
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1686 (defun reftex-arg-cite (optional &optional prompt definition)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1687 "Use reftex-citation to select a key. Insert with `TeX-argument-insert'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1688 This function is intended for AUCTeX macro support."
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1689 (let ((key (reftex-citation t)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1690 (TeX-argument-insert (or key "") optional optional)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1691
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1692 (defun reftex-plug-into-AUCTeX ()
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1693 ;; Replace AucTeX functions with RefTeX functions.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1694 ;; Which functions are replaced is controlled by the variable
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1695 ;; `reftex-plug-into-AUCTeX'.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1696 (let ((flags
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1697 (cond ((eq reftex-plug-into-AUCTeX t) '(t t t t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1698 ((eq reftex-plug-into-AUCTeX nil) '(nil nil nil nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1699 (t reftex-plug-into-AUCTeX))))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1700
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1701 (and (nth 0 flags)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1702 (boundp 'LaTeX-label-function)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1703 (setq LaTeX-label-function 'reftex-label))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1704
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1705 (and (nth 1 flags)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1706 (fboundp 'TeX-arg-label)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1707 (fset 'TeX-arg-label 'reftex-arg-label))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1708
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1709 (and (nth 2 flags)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1710 (fboundp 'TeX-arg-ref)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1711 (fset 'TeX-arg-ref 'reftex-arg-ref))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1712
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1713 (and (nth 3 flags)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1714 (fboundp 'TeX-arg-cite)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1715 (fset 'TeX-arg-cite 'reftex-arg-cite))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1716
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1717
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1718 (defvar reftex-label-alist-external-add-ons nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1719 "List of label alist entries added with reftex-add-to-label-alist.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1720
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1721 (defun reftex-add-to-label-alist (entry-list)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1722 "Add label environment descriptions to `reftex-label-alist-external-add-ons'.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1723 The format of ENTRY-LIST is exactly like `reftex-label-alist'. See there
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1724 for details.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1725 This function makes it possible to support RefTeX from AUCTeX style files.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1726 The entries in ENTRY-LIST will be processed after the user settings in
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1727 `reftex-label-alist', and before the defaults (specified in
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1728 `reftex-default-label-alist-entries'). Any changes made to
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1729 `reftex-label-alist-external-add-ons' will raise a flag to the effect that a
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1730 mode reset is done on the next occasion."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1731 (let (entry)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1732 (while entry-list
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1733 (setq entry (car entry-list)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1734 entry-list (cdr entry-list))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1735 (unless (member entry reftex-label-alist-external-add-ons)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1736 (setq reftex-tables-dirty t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1737 (push entry reftex-label-alist-external-add-ons)))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1738
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1739 ;;; ===========================================================================
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1740 ;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1741 ;;; Multifile support
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1742 ;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1743 ;;; Technical notes: Multifile works as follows: We keep just one list
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1744 ;;; of labels for each master file - this can save a lot of memory.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1745 ;;; `reftex-master-index-list' is an alist which connects the true file name
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1746 ;;; of each master file with the symbols holding the information on that
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1747 ;;; document. Each buffer has local variables which point to these symbols.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1748
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1749 ;; List of variables which handle the multifile stuff.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1750 ;; This list is used to tie, untie, and reset these symbols.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1751 (defconst reftex-multifile-symbols
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1752 '(reftex-docstruct-symbol))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1753
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1754 ;; Alist connecting master file names with the corresponding lisp symbols.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1755 (defvar reftex-master-index-list nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1756
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1757 ;; Last index used for a master file.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1758 (defvar reftex-multifile-index 0)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1759
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1760 ;; Variable holding the symbol with the label list of the document.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1761 (defvar reftex-docstruct-symbol nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1762 (make-variable-buffer-local 'reftex-docstruct-symbol)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1763
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1764 (defun reftex-next-multifile-index ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1765 ;; Return the next free index for multifile symbols.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1766 (incf reftex-multifile-index))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1767
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1768 (defun reftex-tie-multifile-symbols ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1769 ;; Tie the buffer-local symbols to globals connected with the master file.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1770 ;; If the symbols for the current master file do not exist, they are created.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1771
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1772 (let* ((master (file-truename (reftex-TeX-master-file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1773 (index (assoc master reftex-master-index-list))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1774 (symlist reftex-multifile-symbols)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1775 (symbol nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1776 (symname nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1777 (newflag nil))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1778 ;; Find the correct index.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1779 (if index
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1780 ;; symbols do exist
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1781 (setq index (cdr index))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1782 ;; Get a new index and add info to the alist.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1783 (setq index (reftex-next-multifile-index)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1784 newflag t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1785 (push (cons master index) reftex-master-index-list))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1786
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1787 ;; Get/create symbols and tie them.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1788 (while symlist
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1789 (setq symbol (car symlist)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1790 symlist (cdr symlist)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1791 symname (symbol-name symbol))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1792 (set symbol (intern (concat symname "-" (int-to-string index))))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1793 ;; Initialize if new symbols.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1794 (if newflag (set (symbol-value symbol) nil)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1795
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1796 ;; Return t if the symbols did already exist, nil when we've made them.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1797 (not newflag)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1798
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1799 (defun reftex-untie-multifile-symbols ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1800 ;; Remove ties from multifile symbols, so that next use makes new ones.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1801 (let ((symlist reftex-multifile-symbols)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1802 (symbol nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1803 (while symlist
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1804 (setq symbol (car symlist)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1805 symlist (cdr symlist))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1806 (set symbol nil))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1807
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1808 (defun reftex-TeX-master-file ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1809 ;; Return the name of the master file associated with the current buffer.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1810 ;; When AUCTeX is loaded, we will use it's more sophisticated method.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1811 ;; We also support the default TeX and LaTeX modes by checking for a
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1812 ;; variable tex-main-file.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1813
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1814 (let
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1815 ((master
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1816 (cond
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1817 ((fboundp 'TeX-master-file) ; AUCTeX is loaded. Use its mechanism.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1818 (TeX-master-file t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1819 ((boundp 'TeX-master) ; The variable is defined - lets use it.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1820 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1821 ((eq TeX-master t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1822 (buffer-file-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1823 ((eq TeX-master 'shared)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1824 (setq TeX-master (read-file-name "Master file: "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1825 nil nil t nil)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1826 (TeX-master)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1827 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1828 (setq TeX-master (read-file-name "Master file: "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1829 nil nil t nil)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1830 ((boundp 'tex-main-file)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1831 ;; This is the variable from the default TeX modes.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1832 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1833 ((stringp tex-main-file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1834 ;; ok, this must be it
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1835 tex-main-file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1836 (t
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1837 ;; In this case, the buffer is its own master.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1838 (buffer-file-name))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1839 (t
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1840 ;; Know nothing about master file. Assume this is a master file.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1841 (buffer-file-name)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1842 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1843 ((null master)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1844 (error "Need a filename for this buffer. Please save it first."))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1845 ((or (file-exists-p master)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1846 (reftex-get-buffer-visiting master))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1847 ;; We either see the file, or have a buffer on it. OK.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1848 )
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1849 ((or (file-exists-p (concat master ".tex"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1850 (reftex-get-buffer-visiting (concat master ".tex")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1851 ;; Ahh, an extra .tex was missing...
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1852 (setq master (concat master ".tex")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1853 (t
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1854 ;; Something is wrong here. Throw an exception.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1855 (error "No such master file %s" master)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1856 (expand-file-name master)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1857
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1858 (defun reftex-parse-one ()
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1859 "Re-parse this file."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1860 (interactive)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1861 (let ((reftex-enable-partial-scans t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1862 (reftex-access-scan-info '(4))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1863
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1864 (defun reftex-parse-all ()
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1865 "Re-parse entire document."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1866 (interactive)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1867 (reftex-access-scan-info '(16)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1868
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1869 (defun reftex-all-document-files (&optional relative)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1870 ;; Return a list of all files belonging to the current document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1871 ;; When RELATIVE is non-nil, give file names relative to directory
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1872 ;; of master file.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1873 (let* ((all (symbol-value reftex-docstruct-symbol))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1874 (master-dir (file-name-directory (reftex-TeX-master-file)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1875 (re (concat "\\`" (regexp-quote master-dir)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1876 file-list tmp file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1877 (while (setq tmp (assoc 'bof all))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1878 (setq file (nth 1 tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1879 all (cdr (memq tmp all)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1880 (and relative
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1881 (string-match re file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1882 (setq file (substring file (match-end 0))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1883 (push file file-list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1884 (nreverse file-list)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1885
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1886 (defun reftex-create-tags-file ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1887 "Create TAGS file by running `etags' on the current document.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1888 The TAGS file is also immediately visited with `visit-tags-table'."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1889 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1890 (reftex-access-scan-info current-prefix-arg)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1891 (let* ((master (reftex-TeX-master-file))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1892 (files (reftex-all-document-files))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1893 (cmd (format "etags %s" (mapconcat 'identity files " "))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1894 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1895 (set-buffer (reftex-get-buffer-visiting master))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1896 (message "Running etags to create TAGS file...")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1897 (shell-command cmd)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1898 (visit-tags-table "TAGS"))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1899
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1900 ;; History of grep commands.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1901 (defvar reftex-grep-history nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1902 (defvar reftex-grep-command "grep -n "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1903 "Last grep command used in \\[reftex-grep-document]; default for next grep.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1904
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1905 (defun reftex-grep-document (grep-cmd)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1906 "Run grep query through all files related to this document.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1907 With prefix arg, force to rescan document.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1908 This works also without an active TAGS table."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1909
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1910 (interactive
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1911 (list (read-from-minibuffer "Run grep on document (like this): "
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1912 reftex-grep-command nil nil
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1913 'reftex-grep-history)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1914 (reftex-access-scan-info current-prefix-arg)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1915 (let* ((files (reftex-all-document-files t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1916 (cmd (format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1917 "%s %s" grep-cmd
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1918 (mapconcat 'identity files " "))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1919 (grep cmd)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1920
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1921 (defun reftex-search-document (&optional regexp)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1922 "Regexp search through all files of the current TeX document.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1923 Starts always in the master file. Stops when a match is found.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1924 To continue searching for next match, use command \\[tags-loop-continue].
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1925 This works also without an active TAGS table."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1926 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1927 (let ((default (reftex-this-word)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1928 (unless regexp
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1929 (setq regexp (read-string (format "Search regexp in document [%s]: "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1930 default))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1931 (if (string= regexp "") (setq regexp (regexp-quote default)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1932
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1933 (reftex-access-scan-info current-prefix-arg)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1934 (tags-search regexp (list 'reftex-all-document-files))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1935
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1936 (defun reftex-query-replace-document (&optional from to delimited)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1937 "Run a query-replace-regexp of FROM with TO over the entire TeX document.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1938 Third arg DELIMITED (prefix arg) means replace only word-delimited matches.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1939 If you exit (\\[keyboard-quit] or ESC), you can resume the query replace
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1940 with the command \\[tags-loop-continue].
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1941 This works also without an active TAGS table."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1942 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1943 (let ((default (reftex-this-word)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1944 (unless from
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1945 (setq from (read-string (format "Replace regexp in document [%s]: "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1946 default)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1947 (if (string= from "") (setq from (regexp-quote default))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1948 (unless to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1949 (setq to (read-string (format "Replace regexp %s with: " from))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1950 (reftex-access-scan-info current-prefix-arg)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1951 (tags-query-replace from to (or delimited current-prefix-arg)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1952 (list 'reftex-all-document-files))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1953
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1954 (defun reftex-change-label (&optional from to)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1955 "Query replace FROM with TO in all \\label and \\ref commands.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1956 Works on the entire multifile document.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1957 If you exit (\\[keyboard-quit] or ESC), you can resume the query replace
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1958 with the command \\[tags-loop-continue].
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1959 This works also without an active TAGS table."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1960 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1961 (let ((default (reftex-this-word "-a-zA-Z0-9_*.:")))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1962 (unless from
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1963 (setq from (read-string (format "Replace label globally [%s]: "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1964 default))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1965 (if (string= from "") (setq from default))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1966 (unless to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1967 (setq to (read-string (format "Replace label %s with: "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
1968 from))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1969 (reftex-query-replace-document
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1970 (concat "\\\\\\(label\\|[a-z]*ref\\){" (regexp-quote from) "}")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1971 (format "\\\\\\1{%s}" to))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1972
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1973 ;;; ===========================================================================
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1974 ;;;
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1975 ;;; Functions to create and reference automatic labels.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1976
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1977 ;; The following constants are derived from `reftex-label-alist'.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1978
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1979 ;; Prompt used for label type querys directed to the user.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1980 (defconst reftex-type-query-prompt nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1981
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1982 ;; Help string for label type querys.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1983 (defconst reftex-type-query-help nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1984
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1985 ;; Alist relating label type to reference format.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1986 (defconst reftex-typekey-to-format-alist nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1987
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1988 ;; Alist relating label type to label affix.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1989 (defconst reftex-typekey-to-prefix-alist nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1990
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1991 ;; Alist relating environments or macros to label type and context regexp.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1992 (defconst reftex-env-or-mac-alist nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1993
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1994 ;; List of macros carrying a label.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1995 (defconst reftex-label-mac-list nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1996
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
1997 ;; List of environments carrying a label.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1998 (defconst reftex-label-env-list nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
1999
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2000 ;; List of all typekey letters in use.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2001 (defconst reftex-typekey-list nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2002
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2003 ;; Alist relating magic words to a label type.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2004 (defconst reftex-words-to-typekey-alist nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2005
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2006 ;; The last list-of-labels entry used in a reference.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2007 (defvar reftex-last-used-reference (list nil nil nil nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2008
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2009 ;; The regular expression used to abbreviate words.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2010 (defconst reftex-abbrev-regexp
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2011 (concat
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2012 "\\`\\("
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2013 (make-string (nth 0 reftex-abbrev-parameters) ?.)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2014 "[" (nth 2 reftex-abbrev-parameters) "]*"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2015 "\\)"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2016 "[" (nth 3 reftex-abbrev-parameters) "]"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2017 (make-string (1- (nth 1 reftex-abbrev-parameters)) ?.)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2018
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2019 ;; Global variables used for communication between functions.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2020 (defvar reftex-default-context-position nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2021 (defvar reftex-location-start nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2022 (defvar reftex-call-back-to-this-buffer nil)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2023 (defvar reftex-active-toc nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2024 (defvar reftex-tex-path nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2025 (defvar reftex-bib-path nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2026
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2027 ;; Internal list with index numbers of labels in the selection menu
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2028 (defvar reftex-label-index-list)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2029
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2030 ;; List of buffers created temporarily for lookup, which should be killed.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2031 (defvar reftex-buffers-to-kill nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2032
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2033 ;; Regexp to find section statements. Computed from reftex-section-levels.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2034 (defvar reftex-section-regexp nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2035 (defvar reftex-section-or-include-regexp nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2036 (defvar reftex-everything-regexp nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2037 (defvar reftex-find-label-regexp-format nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2038 (defvar reftex-find-label-regexp-format2 nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2039
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2040 ;; The parser functions ----------------------------------
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2041
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2042 (defvar reftex-memory nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2043 "Memorizes old variable values to indicate changes in these variables.")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2044
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2045 (defun reftex-access-scan-info (&optional rescan file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2046 ;; Access the scanning info. When the multifile symbols are not yet tied,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2047 ;; tie them. When they are empty or RESCAN is non-nil, scan the document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2048
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2049 ;; Reset the mode if we had changes to important variables.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2050 (when (or reftex-tables-dirty
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2051 (not (eq reftex-label-alist (nth 0 reftex-memory)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2052 (not (eq reftex-label-alist-external-add-ons
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2053 (nth 1 reftex-memory)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2054 (not (eq reftex-default-label-alist-entries
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2055 (nth 2 reftex-memory))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2056 (reftex-reset-mode))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2057
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2058 (if (eq reftex-docstruct-symbol nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2059 ;; Symbols are not yet tied: Tie them.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2060 (reftex-tie-multifile-symbols))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2061
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2062 (if (and (null (symbol-value reftex-docstruct-symbol))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2063 reftex-save-parse-info)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2064 ;; Try to read the stuff from a file
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2065 (reftex-access-parse-file 'read))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2066
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2067 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2068 ((not (symbol-value reftex-docstruct-symbol))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2069 (reftex-do-parse 1 file))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2070 ((member rescan '(t 1 (4) (16)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2071 (reftex-do-parse rescan file))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2072
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2073 (defun reftex-do-parse (rescan &optional file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2074 ;; Access the scanning info. When the multifile symbols are not yet tied,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2075 ;; tie them. When they are have to be created, do a buffer scan to
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2076 ;; fill them.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2077
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2078 ;; If RESCAN is non-nil, enforce document scanning
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2079
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2080 ;; Normalize the rescan argument
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2081 (setq rescan (cond ((eq rescan t) t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2082 ((eq rescan 1) 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2083 ((equal rescan '(4)) t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2084 ((equal rescan '(16)) 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2085 (t 1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2086
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2087 ;; Partial scans only when allowed
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2088 (unless reftex-enable-partial-scans
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2089 (setq rescan 1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2090
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2091 ;; Do the scanning.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2092
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2093 (let* ((old-list (symbol-value reftex-docstruct-symbol))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2094 (master (reftex-TeX-master-file))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2095 (master-dir (file-name-as-directory (file-name-directory master)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2096 (file (or file (buffer-file-name)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2097 from-file
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2098 docstruct tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2099
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2100 ;; Make sure replacement is really an option here
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2101 (when (and (eq rescan t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2102 (not (and (member (list 'bof file) old-list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2103 (member (list 'eof file) old-list))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2104 (message "Scanning whole document (no file section %s)" file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2105 (setq rescan 1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2106 (when (string= file master)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2107 (message "Scanning whole document (%s is master)" file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2108 (setq rescan 1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2109
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2110 ;; From which file do we start?
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2111 (setq from-file
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2112 (cond ((eq rescan t) (or file master))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2113 ((eq rescan 1) master)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2114 (t (error "horrible!!"))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2115
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2116 ;; Find active toc entry and initialize section-numbers
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2117 (setq reftex-active-toc
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2118 (reftex-last-assoc-before-elt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2119 'toc (list 'bof from-file) old-list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2120 (reftex-init-section-numbers reftex-active-toc)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2121
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2122 (if (eq rescan 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2123 (message "Scanning entire document...")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2124 (message "Scanning document from %s..." from-file))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2125
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2126 (save-window-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2127 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2128 (unwind-protect
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2129 (setq docstruct
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2130 (reftex-parse-from-file
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2131 from-file docstruct master-dir))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2132 (reftex-kill-temporary-buffers))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2133
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2134 (message "Scanning document... done")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2135
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2136 ;; Turn the list around.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2137 (setq docstruct (nreverse docstruct))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2138
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2139 ;; Set or insert
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2140 (setq docstruct (reftex-replace-label-list-segment
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2141 old-list docstruct (eq rescan 1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2142
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2143 ;; Add all missing information
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2144 (unless (assq 'label-numbers docstruct)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2145 (push (cons 'label-numbers nil) docstruct))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2146 (unless (assq 'master-dir docstruct)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2147 (push (cons 'master-dir master-dir) docstruct))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2148 (let* ((bof1 (memq (assq 'bof docstruct) docstruct))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2149 (bof2 (assq 'bof (cdr bof1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2150 (is-multi (not (not (and bof1 bof2))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2151 (entry (or (assq 'is-multi docstruct)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2152 (car (push (list 'is-multi is-multi) docstruct)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2153 (setcdr entry (cons is-multi nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2154 (unless (assq 'xr docstruct)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2155 (let* ((allxr (reftex-all-assq 'xr-doc docstruct))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2156 (alist (mapcar
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2157 '(lambda (x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2158 (if (setq tmp (reftex-find-tex-file (nth 2 x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2159 master-dir))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2160 (cons (nth 1 x) tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2161 (message "Can't find external document %s"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2162 (nth 2 x))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2163 nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2164 allxr))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2165 (alist (delete nil alist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2166 (allprefix (delete nil (mapcar 'car alist)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2167 (regexp (concat "\\`\\(" (mapconcat 'identity allprefix "\\|")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2168 "\\)")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2169 (push (list 'xr alist regexp) docstruct)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2170
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2171 (set reftex-docstruct-symbol docstruct)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2172
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2173 ;; Save the parsing informtion into a file?
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2174 (if reftex-save-parse-info
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2175 (reftex-access-parse-file 'write))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2176
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2177 (defun reftex-is-multi ()
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2178 ;; Tell if this is a multifile document. When not sure, say yes.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2179 (let ((entry (assq 'is-multi (symbol-value reftex-docstruct-symbol))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2180 (if entry
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2181 (nth 1 entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2182 t)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2183
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2184 (defun reftex-parse-from-file (file docstruct master-dir)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2185 ;; Scan the buffer for labels and save them in a list.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2186 (let ((regexp reftex-everything-regexp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2187 (bound 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2188 file-found tmp
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2189 (level 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2190 (highest-level 100)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2191 toc-entry next-buf)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2192
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2193 (catch 'exit
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2194 (setq file-found (reftex-find-tex-file file master-dir))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2195 (unless file-found
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2196 (push (list 'file-error file) docstruct)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2197 (throw 'exit nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2198
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2199 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2200
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2201 (message "Scanning file %s" file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2202 (set-buffer
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2203 (setq next-buf
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2204 (reftex-get-file-buffer-force
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2205 file-found
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2206 (not (eq t reftex-keep-temporary-buffers)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2208 ;; Begin of file mark
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2209 (setq file (buffer-file-name))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2210 (push (list 'bof file) docstruct)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2211
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2212 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2213 (save-restriction
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2214 (widen)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2215 (goto-char 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2216
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2217 (while (re-search-forward regexp nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2218
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2219 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2220
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2221 ((match-end 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2222 ;; It is a label
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2223 (push (reftex-label-info (reftex-match-string 1) file bound)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2224 docstruct))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2225
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2226 ((match-end 3)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2227 ;; It is a section
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2228 (setq bound (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2229
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2230 ;; Insert in List
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2231 (setq toc-entry (reftex-section-info file))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2232 (setq level (nth 5 toc-entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2233 (setq highest-level (min highest-level level))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2234 (if (= level highest-level)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2235 (message
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2236 "Scanning %s %s ..."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2237 (car (nth level reftex-section-levels))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2238 (nth 6 toc-entry)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2239
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2240 (push toc-entry docstruct)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2241 (setq reftex-active-toc toc-entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2242
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2243 ((match-end 7)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2244 ;; It's an include or input
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2245 (setq docstruct
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2246 (reftex-parse-from-file
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2247 (reftex-match-string 7)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2248 docstruct master-dir)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2249
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2250 ((match-end 8)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2251 ;; A macro with label
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2252 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2253 (let* ((mac (reftex-match-string 8))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2254 (label (progn (goto-char (match-end 8))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2255 (save-match-data
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2256 (reftex-no-props
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2257 (reftex-nth-arg-wrapper
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2258 mac)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2259 (entry (progn (goto-char (match-end 0))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2260 (reftex-label-info
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2261 label file bound mac))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2262 (push entry docstruct))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2263 (t (error "This should not happen (reftex-parse-from-file)")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2264 )
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2265
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2266
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2267 ;; Find bibliography statement
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2268 (when (setq tmp (reftex-locate-bibliography-files master-dir))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2269 (push (cons 'bib tmp) docstruct))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2270
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2271 ;; Find external document specifications
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2272 (goto-char 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2273 (while (re-search-forward "[\n\r][ \t]*\\\\externaldocument\\(\\[\\([^]]*\\)\\]\\)?{\\([^}]+\\)}" nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2274 (push (list 'xr-doc (reftex-match-string 2)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2275 (reftex-match-string 3))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2276 docstruct))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2277
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2278 ;; End of file mark
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2279 (push (list 'eof file) docstruct))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2280
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2281 ;; Kill the scanned buffer
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2282 (reftex-kill-temporary-buffers next-buf))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2283
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2284 ;; Return the list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2285 docstruct))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2286
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2287 (defun reftex-locate-bibliography-files (master-dir)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2288 ;; Scan buffer for bibliography macro and return file list.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2289 (let (file-list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2290 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2291 (goto-char (point-min))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2292 (if (re-search-forward
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2293 "\\(\\`\\|[\n\r]\\)[ \t]*\\\\bibliography{[ \t]*\\([^}]+\\)" nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2294 (setq file-list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2295 (mapcar '(lambda (x) (concat x ".bib"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2296 (reftex-delete-list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2297 reftex-bibfile-ignore-list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2298 (split-string
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2299 (reftex-match-string 2)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2300 "[ \t\n\r]*,[ \t\n\r]*")))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2301 (delete nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2302 (mapcar
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2303 (function
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2304 (lambda (file) (reftex-find-bib-file file master-dir)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2305 file-list)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2306
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2307 (defun reftex-last-assoc-before-elt (key elt list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2308 ;; Find the last association of KEY in LIST before or at ELT
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2309 ;; ELT is found in LIST with equal, not eq.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2310 ;; Returns nil when either KEY or elt are not found in LIST.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2311 ;; On success, returns the association.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2312 (let* ((elt (car (member elt list))) ass last-ass)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2313
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2314 (while (and (setq ass (assoc key list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2315 (setq list (memq ass list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2316 (memq elt list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2317 (setq last-ass ass
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2318 list (cdr list)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2319 last-ass))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2320
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2321 (defun reftex-replace-label-list-segment (old insert &optional entirely)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2322 ;; Replace the segment in OLD which corresponds to INSERT.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2323 ;; Works with side effects, directly changes old.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2324 ;; If entirely is t, just return INSERT.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2325 ;; This function also makes sure the old toc markers do not point anywhere.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2326
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2327 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2328 (entirely
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2329 (reftex-silence-toc-markers old (length old))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2330 insert)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2331 (t (let* ((new old)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2332 (file (nth 1 (car insert)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2333 (eof-list (member (list 'eof file) old))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2334 (bof-list (member (list 'bof file) old))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2335 n)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2336 (if (not (and bof-list eof-list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2337 (error "Cannot splice")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2338 ;; Splice
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2339 (reftex-silence-toc-markers bof-list (- (length bof-list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2340 (length eof-list)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2341 (setq n (- (length old) (length bof-list)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2342 (setcdr (nthcdr n new) (cdr insert))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2343 (setcdr (nthcdr (1- (length new)) new) (cdr eof-list)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2344 new))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2345
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2346 (defun reftex-silence-toc-markers (list n)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2347 ;; Set all markers in list to nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2348 (while (and list (> (decf n) -1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2349 (and (eq (car (car list)) 'toc)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2350 (markerp (nth 4 (car list)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2351 (set-marker (nth 4 (car list)) nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2352 (pop list)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2353
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2354 (defun reftex-access-parse-file (action)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2355 (let* ((list (symbol-value reftex-docstruct-symbol))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2356 (master (reftex-TeX-master-file))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2357 (enable-local-variables nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2358 (file (if (string-match "\\.[a-zA-Z]+\\'" master)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2359 (concat (substring master 0 (match-beginning 0)) ".rel")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2360 (concat master ".rel"))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2361 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2362 ((eq action 'readable)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2363 (file-readable-p file))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2364 ((eq action 'restore)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2365 (if (eq reftex-docstruct-symbol nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2366 ;; Symbols are not yet tied: Tie them.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2367 (reftex-tie-multifile-symbols))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2368 (if (file-exists-p file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2369 ;; load the file and return t for success
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2370 (progn (load-file file) t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2371 ;; return nil for failure
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2372 nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2373 ((eq action 'read)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2374 (if (file-exists-p file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2375 ;; load the file and return t for success
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2376 (progn (load-file file) t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2377 ;; return nil for failure
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2378 nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2379 (t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2380 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2381 (if (file-writable-p file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2382 (progn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2383 (message "Writing parse file %s" (abbreviate-file-name file))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2384 (find-file file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2385 (erase-buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2386 (insert (format ";; RefTeX parse info file\n"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2387 (insert (format ";; File: %s\n" master))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2388 (insert (format ";; Date: %s\n"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2389 (format-time-string "%D %T"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2390 (current-time))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2391 (insert (format ";; User: %s (%s)\n\n"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2392 (user-login-name) (user-full-name)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2393 (insert "(set reftex-docstruct-symbol '(\n\n")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2394 (let ((standard-output (current-buffer)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2395 (mapcar
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2396 (function
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2397 (lambda (x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2398 (cond ((eq (car x) 'toc)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2399 ;; A toc entry. Do not save the marker.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2400 ;; Save the markers position at position 8
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2401 (print (list 'toc "toc" (nth 2 x) (nth 3 x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2402 nil (nth 5 x) (nth 6 x) (nth 7 x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2403 (or (and (markerp (nth 4 x))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2404 (marker-position (nth 4 x)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2405 (nth 8 x)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2406 (t (print x)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2407 list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2408 (insert "))")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2409 (save-buffer 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2410 (kill-buffer (current-buffer)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2411 (error "Cannot write to file %s" file)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2412 t))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2413
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2414 ;; Creating labels --------------
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2415
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2416 (defun reftex-label (&optional environment no-insert)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2417 "Insert a unique label. Return the label.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2418 If ENVIRONMENT is given, don't bother to find out yourself.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2419 If NO-INSERT is non-nil, do not insert label into buffer.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2420 With prefix arg, force to rescan document first.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2421 The label is also inserted into the label list.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2422 This function is controlled by the settings of reftex-insert-label-flags."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2423
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2424 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2425
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2426 ;; Ensure access to scanning info and rescan buffer if prefix are is '(4).
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2427 (reftex-access-scan-info current-prefix-arg)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2428
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2429 ;; Find out what kind of environment this is and abort if necessary.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2430 (if (or (not environment)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2431 (not (assoc environment reftex-env-or-mac-alist)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2432 (setq environment (reftex-label-location)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2433 (unless environment
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2434 (error "Can't figure out what kind of label should be inserted"))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2435
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2436 ;; Ok, go ahead.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2437 (let* ((entry (assoc environment reftex-env-or-mac-alist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2438 (typekey (nth 1 entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2439 (format (nth 3 entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2440 label prefix valid default force-prompt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2441 (when (and (eq (string-to-char environment) ?\\)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2442 (nth 4 entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2443 (memq (preceding-char) '(?\[ ?\{)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2444 (setq format "%s"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2445
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2446 (setq prefix (or (cdr (assoc typekey reftex-typekey-to-prefix-alist))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2447 (concat typekey "-")))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2448 ;; Replace any escapes in the prefix
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2449 (setq prefix (reftex-replace-prefix-escapes prefix))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2450
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2451 ;; Make a default label.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2452 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2453
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2454 ((reftex-typekey-check typekey (nth 0 reftex-insert-label-flags))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2455 ;; Derive a label from context.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2456 (setq reftex-active-toc (reftex-last-assoc-before-elt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2457 'toc (car (reftex-where-am-I))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2458 (symbol-value reftex-docstruct-symbol)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2459 (setq default (reftex-no-props
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2460 (nth 2 (reftex-label-info " " nil nil t))))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2461 ;; Catch the cases where the is actually no context available.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2462 (if (or (string-match "NO MATCH FOR CONTEXT REGEXP" default)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2463 (string-match "ILLEGAL VALUE OF PARSE" default)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2464 (string-match "SECTION HEADING NOT FOUND" default)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2465 (string-match "HOOK ERROR" default)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2466 (string-match "^[ \t]*$" default))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2467 (setq default prefix
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2468 force-prompt t) ; need to prompt
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2469 (setq default (concat prefix (reftex-string-to-label default)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2470
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2471 ;; Make it unique.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2472 (setq default (reftex-uniquify-label default nil "-"))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2473
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2474 ((reftex-typekey-check typekey (nth 1 reftex-insert-label-flags)) ; prompt
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2475 ;; Minimal default: the user will be prompted.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2476 (setq default prefix))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2477
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2478 (t
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2479 ;; Make an automatic label.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2480 (setq default (reftex-uniquify-label prefix t))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2481
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2482 ;; Should we ask the user?
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2483 (if (or (reftex-typekey-check typekey
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2484 (nth 1 reftex-insert-label-flags)) ; prompt
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2485 force-prompt)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2486
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2487 (while (not valid)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2488 ;; iterate until we get a legal label
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2489
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2490 (setq label (read-string
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2491 (if (string= format "%s") "Naked Label: " "Label: ")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2492 default))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2493
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2494 ;; Lets make sure that this is a legal label
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2495 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2496
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2497 ;; Test if label contains strange characters
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2498 ((string-match reftex-label-illegal-re label)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2499 (message "Label \"%s\" contains illegal characters" label)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2500 (ding)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2501 (sit-for 2))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2502
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2503 ;; Look it up in the label list
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2504 ((setq entry (assoc label
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2505 (symbol-value reftex-docstruct-symbol)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2506 (message "Label \"%s\" exists in file %s" label (nth 3 entry))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2507 (ding)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2508 (sit-for 2))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2509
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2510 ;; Label is ok
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2511 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2512 (setq valid t))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2513 (setq label default))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2514
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2515 ;; Insert the label into the label list
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2516 (let* ((here-I-am-info (reftex-where-am-I))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2517 (here-I-am (car here-I-am-info))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2518 (note (if (cdr here-I-am-info)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2519 ""
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2520 "POSITION UNCERTAIN. RESCAN TO FIX."))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2521 (file (buffer-file-name))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2522 (text nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2523 (tail (memq here-I-am (symbol-value reftex-docstruct-symbol))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2524
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2525 (if tail
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2526 (setcdr tail (cons (list label typekey text file note)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2527 (cdr tail)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2528
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2529 ;; Insert the label into the buffer
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2530 (unless no-insert
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2531 (insert (format format label)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2532
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2533 ;; return value of the function is the label
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2534 label))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2535
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2536 (defun reftex-string-to-label (string)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2537 ;; Convert a string (a sentence) to a label.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2538 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2539 ;; Uses reftex-derive-label-parameters and reftex-abbrev-parameters
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2540 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2541
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2542 (let* ((words0 (split-string string "[- \t\n\r]+"))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2543 (ignore-words (nth 5 reftex-derive-label-parameters))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2544 words word)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2545
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2546 ;; remove words from the ignore list or with funny characters
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2547 (while (setq word (pop words0))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2548 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2549 ((member (downcase word) ignore-words))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2550 ((string-match reftex-label-illegal-re word)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2551 (when (nth 2 reftex-derive-label-parameters)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2552 (while (string-match reftex-label-illegal-re word)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2553 (setq word (replace-match "" nil nil word)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2554 (push word words)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2555 (t
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2556 (push word words))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2557 (setq words (nreverse words))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2558
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2559 ;; restrict number of words
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2560 (if (> (length words) (nth 0 reftex-derive-label-parameters))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2561 (setcdr (nthcdr (1- (nth 0 reftex-derive-label-parameters)) words) nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2562
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2563 ;; First, try to use all words
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2564 (setq string (mapconcat '(lambda(w) w) words
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2565 (nth 4 reftex-derive-label-parameters)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2566
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2567 ;; Abbreviate words if enforced by user settings or string length
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2568 (if (or (eq t (nth 3 reftex-derive-label-parameters))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2569 (and (nth 3 reftex-derive-label-parameters)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2570 (> (length string) (nth 1 reftex-derive-label-parameters))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2571 (setq words
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2572 (mapcar
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2573 '(lambda (w) (if (string-match reftex-abbrev-regexp w)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2574 (match-string 1 w)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2575 w))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2576 words)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2577 string (mapconcat '(lambda(w) w) words
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2578 (nth 4 reftex-derive-label-parameters))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2579
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2580 ;; Shorten if still to long
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2581 (setq string
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2582 (if (> (length string) (nth 1 reftex-derive-label-parameters))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2583 (substring string 0 (nth 1 reftex-derive-label-parameters))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2584 string))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2585
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2586 ;; Delete the final punctuation, if any
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2587 (if (string-match "[^a-zA-Z0-9]+\\'" string)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2588 (setq string (replace-match "" nil nil string)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2589 string))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2590
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2591 (defun reftex-replace-prefix-escapes (prefix)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2592 ;; Replace %escapes in a label prefix
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2593 (save-match-data
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2594 (let (letter (num 0) replace)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2595 (while (string-match "\\%\\([a-zA-Z]\\)" prefix num)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2596 (setq letter (match-string 1 prefix))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2597 (setq replace
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2598 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2599 ((equal letter "f")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2600 (file-name-sans-extension
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2601 (file-name-nondirectory (buffer-file-name))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2602 ((equal letter "F")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2603 (let ((masterdir (file-name-directory (reftex-TeX-master-file)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2604 (file (file-name-sans-extension (buffer-file-name))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2605 (if (string-match (concat "\\`" (regexp-quote masterdir))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2606 file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2607 (substring file (length masterdir))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2608 file)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2609 ((equal letter "u")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2610 (or (user-login-name) ""))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2611 (t "")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2612 (setq num (1- (+ (match-beginning 1) (length replace)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2613 prefix (replace-match replace nil nil prefix)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2614 prefix)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2615
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2616 (defun reftex-label-location (&optional bound)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2617 ;; Return the environment or macro which determines the label type at point.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2618 ;; If optional BOUND is an integer, limit backward searches to that point.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2619
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2620 (let* ((loc1 (reftex-what-macro reftex-label-mac-list bound))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2621 (loc2 (reftex-what-environment reftex-label-env-list bound))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2622 (p1 (or (cdr loc1) 0))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2623 (p2 (or (cdr loc2) 0)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2624
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2625 (setq reftex-location-start (max p1 p2))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2626 (if (>= p1 p2)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2627 (progn
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2628 (setq reftex-default-context-position (+ p1 (length (car loc1))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2629 (or (car loc1) "section"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2630 (setq reftex-default-context-position (+ p2 8 (length (car loc2))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2631 (or (car loc2) "section"))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2632
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2633 (defun reftex-uniquify-label (label &optional force separator)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2634 ;; Make label unique by appending a number.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2635 ;; Optional FORCE means, force appending a number, even if label is unique.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2636 ;; Optional SEPARATOR is a string to stick between label and number.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2637
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2638 ;; Ensure access to scanning info
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2639 (reftex-access-scan-info)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2640
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2641 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2642 ((and (not force)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2643 (not (assoc label (symbol-value reftex-docstruct-symbol))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2644 label)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2645 (t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2646 (let* ((label-numbers (assq 'label-numbers
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2647 (symbol-value reftex-docstruct-symbol)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2648 (label-numbers-alist (cdr label-numbers))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2649 (cell (or (assoc label label-numbers-alist)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2650 (car (setcdr label-numbers
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2651 (cons (cons label 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2652 label-numbers-alist)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2653 (num (1+ (cdr cell)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2654 (sep (or separator "")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2655 (while (assoc (concat label sep (int-to-string num))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2656 (symbol-value reftex-docstruct-symbol))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2657 (incf num))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2658 (setcdr cell num)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2659 (concat label sep (int-to-string num))))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2660
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2661 ;; Help string for the reference label menu
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2662 (defconst reftex-select-label-prompt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2663 "Select: [n]ext [p]revious [r]escan [ ]context e[x]tern [q]uit RET [?]HELP+more")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2664
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2665 (defconst reftex-select-label-help
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2666 " AVAILABLE KEYS IN REFERENCE LABEL MENU
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2667 --------------------------------------
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2668 n / p Go to next/previous label (Cursor motion works as well)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2669 C-s / C-r Search forward/backward. Use repeated C-s/C-r as in isearch.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2670 r / s Reparse document / Switch label type
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2671 x Switch to label menu of external document (with LaTeX package `xr')
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2672 t i c # % Toggle: [i]ncl. file borders, [t]able of contents, [c]ontext
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2673 [#] label counters, [%] labels in comments
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2674 SPC Show full context for current label in other window
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2675 f Toggle follow mode: other window will follow context
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2676 l / q Reuse last referenced label / Quit without accepting label
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2677 e Recursive Edit into other window
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2678 RET Accept current label")
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2679
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2680 (defun reftex-reference (&optional type no-insert)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2681 "Make a LaTeX reference. Look only for labels of a certain TYPE.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2682 With prefix arg, force to rescan buffer for labels. This should only be
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2683 necessary if you have recently entered labels yourself without using
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2684 reftex-label. Rescanning of the buffer can also be requested from the
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2685 label selection menu.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2686 The function returns the selected label or nil.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2687 If NO-INSERT is non-nil, do not insert \\ref command, just return label.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2688 When called with 2 C-u prefix args, disable magic word recognition."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2689
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2690 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2691
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2692 ;; check for active recursive edits
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2693 (reftex-check-recursive-edit)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2694
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2695 ;; Ensure access to scanning info and rescan buffer if prefix are is '(4)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2696 (reftex-access-scan-info current-prefix-arg)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2697
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2698 (unless type
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2699 ;; guess type from context
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2700 (if (and reftex-guess-label-type
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2701 (setq type (assoc (downcase (reftex-word-before-point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2702 reftex-words-to-typekey-alist)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2703 (setq type (cdr type))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2704 (setq type (reftex-query-label-type))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2705
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2706 (let (label pair
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2707 (form (or (cdr (assoc type reftex-typekey-to-format-alist))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2708 "\\ref{%s}")))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2709
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2710 ;; Have the user select a label
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2711 (setq pair (reftex-offer-label-menu type))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2712 (setq label (car pair))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2713
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2714 (if (and label
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2715 (not no-insert))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2716 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2717 ;; do we need to remove spaces?
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2718 (if (string= "~" (substring form 0 1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2719 (while (or (= (preceding-char) ?\ )
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2720 (= (preceding-char) ?\C-i))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2721 (backward-delete-char 1)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2722 ;; ok, insert the reference
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2723 (insert (format form label label))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2724 (message ""))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2725 (message "Quit"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2726 ;; return the label
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2727 label))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2728
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2729 (defun reftex-offer-label-menu (typekey)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
2730 ;; Offer a menu with the appropriate labels. Return (label . file).
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2731 (let* ((buf (current-buffer))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2732 (xr-data (assq 'xr (symbol-value reftex-docstruct-symbol)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2733 (xr-alist (cons (cons "" (buffer-file-name)) (nth 1 xr-data)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2734 (xr-index 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2735 (here-I-am (car (reftex-where-am-I)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2736 (toc (reftex-typekey-check typekey reftex-label-menu-flags 0))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2737 (files (reftex-typekey-check typekey reftex-label-menu-flags 7))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2738 (context (not (reftex-typekey-check
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2739 typekey reftex-label-menu-flags 3)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2740 (counter (reftex-typekey-check
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2741 typekey reftex-label-menu-flags 2))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2742 (follow (reftex-typekey-check
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2743 typekey reftex-label-menu-flags 4))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2744 (commented (nth 5 reftex-label-menu-flags))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2745 (match-everywhere (reftex-typekey-check
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2746 typekey reftex-label-menu-flags 6))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2747 (prefix "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2748 offset rtn key cnt last-cnt entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2749
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2750 (setq entry (cons nil nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2751
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2752 ;; The following unwind-protect kills temporary buffers after use
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2753 (unwind-protect
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2754 (catch 'exit
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2755 (while t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2756 (save-window-excursion
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2757 (setq reftex-call-back-to-this-buffer buf)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2758 (switch-to-buffer-other-window "*RefTeX Select*")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2759 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2760 (setq truncate-lines t)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2761 (setq mode-line-format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2762 (list "---- " 'mode-line-buffer-identification
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2763 " " (abbreviate-file-name
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2764 (buffer-file-name buf))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2765 " -%-"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2766
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2767 (setq reftex-label-index-list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2768 (reftex-make-and-insert-label-list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2769 typekey buf toc files context counter commented
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2770 here-I-am prefix))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2771 (setq here-I-am nil) ; turn off determination of offset
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2772 ;; use only when searched
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2773 (setq offset (or (car reftex-label-index-list) offset))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2774 ;; only this is the true list
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2775 (pop reftex-label-index-list)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2776 (setq rtn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2777 (reftex-select-item
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2778 reftex-select-label-prompt
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2779 "^>"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2780 2
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2781 reftex-select-label-help
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2782 '(?r ?R ?g ?c ?t ?s ?# ?i ?l ?% ?x)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2783 offset
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2784 'reftex-select-label-callback follow
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2785 match-everywhere))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2786 (setq key (car rtn)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2787 cnt (nth 1 rtn)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2788 last-cnt (nth 2 rtn)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2789 offset (1+ (or cnt last-cnt 0)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2790 (unless key (throw 'exit nil))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2791 (cond
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2792 ((or (eq key ?r)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2793 (eq key ?R)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2794 (eq key ?g))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2795 ;; rescan buffer
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2796 (reftex-parse-document buf (or cnt last-cnt) key))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2797 ((eq key ?c)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2798 ;; toggle context mode
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2799 (setq context (not context)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2800 ((eq key ?s)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2801 ;; switch type
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2802 (setq typekey (reftex-query-label-type)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2803 ((eq key ?t)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2804 ;; toggle tabel of contents display
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2805 (setq toc (not toc)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2806 ((eq key ?i)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2807 ;; toggle display of included file borders
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2808 (setq files (not files)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2809 ((eq key ?#)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2810 ;; toggle counter display
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2811 (setq counter (not counter)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2812 ((eq key ?%)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2813 ;; toggle display of commented labels
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2814 (setq commented (not commented)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2815 ((eq key ?l)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2816 ;; reuse the last referenced label again
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2817 (setq entry reftex-last-used-reference)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2818 (throw 'exit t))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2819 ((eq key ?x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2820 ;; select an external document
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2821 (setq xr-index (reftex-select-external-document
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2822 xr-alist xr-index))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2823 (setq buf (or (reftex-get-file-buffer-force
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2824 (cdr (nth xr-index xr-alist)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2825 (error "Cannot switch document"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2826 prefix (or (car (nth xr-index xr-alist)) "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2827 offset nil))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2828 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2829 (set-buffer buf)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2830 (if cnt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2831 (progn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2832 (setq entry (nth (nth cnt reftex-label-index-list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2833 (symbol-value reftex-docstruct-symbol)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2834 (setq reftex-last-used-reference entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2835 (setq entry nil))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2836 (throw 'exit t))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2837 (kill-buffer "*RefTeX Select*")
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2838 (and (get-buffer "*RefTeX Context Copy*")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2839 (kill-buffer "*RefTeX Context Copy*"))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2840 (reftex-kill-temporary-buffers))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2841 (cons (if (nth 0 entry) (concat prefix (nth 0 entry)) nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2842 (nth 3 entry))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2843
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2844 (defun reftex-select-external-document (xr-alist xr-index)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2845 ;; Return index of an external document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2846 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2847 ((= (length xr-alist) 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2848 (message "No external douments available")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2849 (ding) 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2850 ((= (length xr-alist) 2)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2851 (- 1 xr-index))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2852 (t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2853 (save-window-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2854 (let* ((fmt " [%c] %-5s %s\n") (n (1- ?0)) key)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2855 (with-output-to-temp-buffer "*RefTeX Select*"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2856 (princ
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2857 (concat "Select a document by pressing a number key:\n KEY PREFIX DOCUMENT\n----------------------\n"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2858 (mapconcat '(lambda (x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2859 (format fmt (incf n) (or (car x) "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2860 (abbreviate-file-name (cdr x))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2861 xr-alist ""))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2862 (setq key (read-char))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2863 (if (< (- key ?1) (length xr-alist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2864 (- key ?0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2865 (error "Illegal document selection [%c]" key)))))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2866
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2867 (defun reftex-make-and-insert-label-list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2868 (typekey0 buf toc files context counter show-commented here-I-am xr-prefix)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2869 ;; Insert a menu of all labels in buffer BUF into current buffer.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2870 ;; Return the list of labels, with the index of HERE-I-AM as extra car.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2871 (let* ((font (reftex-use-fonts))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2872 (refont (reftex-refontify))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2873 (cnt 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2874 (index -1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2875 (toc-indent " ")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2876 (label-indent
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2877 (concat "> "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2878 (if toc (make-string (* 7 reftex-level-indent) ?\ ) "")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2879 (context-indent
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2880 (concat ". "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2881 (if toc (make-string (* 7 reftex-level-indent) ?\ ) "")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2882 all cell text label typekey note comment master-dir-re
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2883 index-list offset docstruct-symbol from from1 to)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2884
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2885 ;; Pop to buffer buf to get the correct buffer-local variables
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2886 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2887 (set-buffer buf)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2888
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2889 ;; Ensure access to scanning info
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2890 (reftex-access-scan-info)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2891
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2892 (setq docstruct-symbol reftex-docstruct-symbol
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2893 all (symbol-value reftex-docstruct-symbol)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2894 reftex-active-toc nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2895 master-dir-re
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2896 (concat "\\`" (regexp-quote
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2897 (file-name-directory (reftex-TeX-master-file))))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2898
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2899 (when refont
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2900 ;; Calculate font-lock-defaults as in LaTeX mode.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2901 (make-local-variable 'font-lock-defaults)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2902 (setq font-lock-defaults nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2903 (let ((major-mode 'latex-mode))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2904 (font-lock-set-defaults))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2905 ;; The following is only needed for XEmacs, but does not hurt Emacs.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2906 (setq font-lock-mode nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2907
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2908 ;; Walk the docstruct and insert the appropriate stuff
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2909
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2910 (while (setq cell (pop all))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2911
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2912 (incf index)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2913 (setq from (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2914
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2915 (if (eq cell here-I-am) (setq offset (1+ cnt)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2916
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2917 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2918
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2919 ((memq (car cell) '(bib label-numbers master-dir is-multi
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2920 xr xr-doc)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2921 ;; These are currently ignored
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2922
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2923 ((memq (car cell) '(bof eof file-error))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2924 ;; Beginning or end of a file
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2925 (when files
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2926 (insert
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2927 " " (if (string-match master-dir-re (nth 1 cell))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2928 (substring (nth 1 cell) (match-end 0))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2929 (nth 1 cell))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2930 (cond ((eq (car cell) 'bof) " starts here\n")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2931 ((eq (car cell) 'eof) " ends here\n")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2932 ((eq (car cell) 'file-error) " was not found\n")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2933 (when font
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2934 (put-text-property from (point)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2935 'face 'font-lock-function-name-face))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2936
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2937 ((eq (car cell) 'toc)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2938 ;; a table of contents entry
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2939 (when toc
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2940 (setq reftex-active-toc cell)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2941 (insert (concat toc-indent (nth 2 cell) "\n"))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2942
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2943 ((stringp (car cell))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2944 ;; a label
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2945 (when (null (nth 2 cell))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2946 ;; No context yet. Quick update.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2947 (setq cell (reftex-label-info-update cell))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2948 (setcar (nthcdr index (symbol-value docstruct-symbol))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2949 cell))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2950
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2951 (setq label (car cell)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2952 typekey (nth 1 cell)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2953 text (nth 2 cell)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2954 note (nth 4 cell)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2955 comment (get-text-property 0 'in-comment text))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2956
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2957 (when (and (or (string= typekey typekey0) (string= typekey0 " "))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2958 (or show-commented (null comment)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2959
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2960 ;; Yes we want this one
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2961 (incf cnt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2962 (push index index-list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2963
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2964 (setq label (concat xr-prefix label))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2965 (when comment (setq label (concat "% " label)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2966 (insert label-indent label)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2967 (when font
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2968 (put-text-property
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2969 (- (point) (length label)) (point)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2970 'face (if comment
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2971 'font-lock-comment-face
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2972 'font-lock-reference-face)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2973
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2974 (insert (if counter (format " (%d) " cnt) "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2975 (if comment " LABEL IS COMMENTED OUT " "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2976 (if note (concat " " note) "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2977 "\n")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2978 (setq to (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2979
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2980 (when context
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2981 (setq from1 to)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2982 (insert context-indent text "\n")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2983 (setq to (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2984 (when refont
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2985 (font-lock-fontify-region from1 to)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2986 (goto-char to)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2987 (put-text-property from to 'cnt (1- cnt))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2988 (goto-char to)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2989
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2990 ;; Return the index list
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2991 (cons offset (nreverse index-list))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
2992
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2993 (defun reftex-parse-document (&optional buffer cnt key)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2994 "Rescan the document."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2995 (interactive)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2996 (save-window-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2997 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2998 (if buffer
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
2999 (if (not (bufferp buffer))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3000 (error "No such buffer %s" (buffer-name buffer))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3001 (set-buffer buffer)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3002 (let ((arg (if (eq key ?R) '(16) '(4)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3003 (file (if cnt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3004 (nth 3
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3005 (nth (nth cnt reftex-label-index-list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3006 (symbol-value reftex-docstruct-symbol))))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3007 (reftex-access-scan-info arg file)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3008
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3009 (defun reftex-query-label-type ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3010 ;; Ask for label type
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3011 (message reftex-type-query-prompt)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3012 (let ((key (read-char)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3013 (when (eq key ?\?)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3014 (save-window-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3015 (with-output-to-temp-buffer "*RefTeX Help*"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3016 (princ reftex-type-query-help))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3017 (setq key (read-char))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3018 (kill-buffer "*RefTeX Help*")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3019 (unless (member (char-to-string key) reftex-typekey-list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3020 (error "No such label type: %s" (char-to-string key)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3021 (char-to-string key)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3022
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3023 ;; Variable holding the vector with section numbers
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3024 (defvar reftex-section-numbers [0 0 0 0 0 0 0 0])
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3025
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3026 (defun reftex-section-info (file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3027 ;; Return a section entry for the current match.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3028 ;; Carefull: This function expects the match-data to be still in place!
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3029 (let* ((marker (set-marker (make-marker) (1- (match-beginning 3))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3030 (macro (reftex-match-string 3))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3031 (star (= ?* (char-after (match-end 3))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3032 (level (cdr (assoc macro reftex-section-levels)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3033 (section-number (reftex-section-number
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3034 reftex-section-numbers level star))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3035 (text1 (save-match-data (save-excursion (reftex-context-substring))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3036 (literal (buffer-substring-no-properties
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3037 (1- (match-beginning 3))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3038 (min (point-max) (+ (match-end 0) (length text1) 1))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3039 ;; Literal can be too short since text1 too short. No big problem.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3040 (text (reftex-nicify-text text1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3041
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3042 ;; Add section number and indentation
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3043 (setq text
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3044 (concat
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3045 (make-string (* reftex-level-indent level) ?\ )
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3046 (if (nth 1 reftex-label-menu-flags) ; section number flag
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3047 (concat section-number " "))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3048 text))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3049 ;; Fontify
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3050 (if (reftex-use-fonts)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3051 (put-text-property 0 (length text)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3052 'face 'font-lock-comment-face text))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3053 (list 'toc "toc" text file marker level section-number
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3054 literal (marker-position marker))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3055
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3056 (defun reftex-label-info-update (cell)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3057 ;; Update information about just one label in a different file.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3058 ;; CELL contains the old info list
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3059 (let* ((label (nth 0 cell))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3060 (typekey (nth 1 cell))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3061 ;; (text (nth 2 cell))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3062 (file (nth 3 cell))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3063 (note (nth 4 cell))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3064 (buf (reftex-get-file-buffer-force
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3065 file (not (eq t reftex-keep-temporary-buffers)))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3066 (if (not buf)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3067 (list label typekey "" file "LOST LABEL. RESCAN TO FIX.")
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3068 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3069 (set-buffer buf)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3070 (save-restriction
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3071 (widen)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3072 (goto-char 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3073
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3074 (if (or (re-search-forward
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3075 (format reftex-find-label-regexp-format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3076 (regexp-quote label)) nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3077 (re-search-forward
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3078 (format reftex-find-label-regexp-format2
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3079 (regexp-quote label)) nil t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3080
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3081 (progn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3082 (backward-char 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3083 (append (reftex-label-info label file) (list note)))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3084 (list label typekey "" file "LOST LABEL. RESCAN TO FIX.")))))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3085
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3086 (defun reftex-label-info (label &optional file bound derive env-or-mac)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3087 ;; Return info list on LABEL at point.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3088 (let* ((env-or-mac (or env-or-mac (reftex-label-location bound)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3089 (typekey (nth 1 (assoc env-or-mac reftex-env-or-mac-alist)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3090 (file (or file (buffer-file-name)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3091 (parse (if (reftex-typekey-check
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3092 typekey reftex-use-text-after-label-as-context)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3093 nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3094 (nth 2 (assoc env-or-mac reftex-env-or-mac-alist))))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3095 (text (reftex-short-context env-or-mac parse reftex-location-start
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3096 derive)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3097 (if (reftex-in-comment)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3098 (put-text-property 0 1 'in-comment t text))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3099 (list label typekey text file)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3100
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3101 (defun reftex-in-comment ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3102 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3103 (skip-chars-backward "^%\n\r")
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3104 (eq (preceding-char) ?%)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3105
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3106 (defun reftex-short-context (env parse &optional bound derive)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3107 ;; Get about one line of useful context for the label definition at point.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3108
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3109 (if (consp parse)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3110 (setq parse (if derive (cdr parse) (car parse))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3111
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3112 (reftex-nicify-text
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3113
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3114 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3115
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3116 ((null parse)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3117 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3118 (reftex-context-substring)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3119
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3120 ((eq parse t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3121 (if (string= env "section")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3122 ;; special treatment for section labels
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3123 (save-excursion
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3124 (if (and (re-search-backward reftex-section-or-include-regexp
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3125 (point-min) t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3126 (match-end 2))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3127 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3128 (goto-char (match-end 0))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3129 (reftex-context-substring))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3130 (if reftex-active-toc
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3131 (progn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3132 (string-match "{\\([^}]*\\)" (nth 7 reftex-active-toc))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3133 (match-string 1 (nth 7 reftex-active-toc)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3134 "SECTION HEADING NOT FOUND")))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3135 (save-excursion
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3136 (goto-char reftex-default-context-position)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3137 (unless (eq (string-to-char env) ?\\)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3138 (reftex-move-over-touching-args))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3139 (reftex-context-substring))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3140
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3141 ((stringp parse)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3142 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3143 (if (re-search-backward parse bound t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3144 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3145 (goto-char (match-end 0))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3146 (reftex-context-substring))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3147 "NO MATCH FOR CONTEXT REGEXP")))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3148
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3149 ((integerp parse)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3150 (or (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3151 (goto-char reftex-default-context-position)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3152 (reftex-nth-arg
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3153 parse
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3154 (nth 6 (assoc env reftex-env-or-mac-alist))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3155 ""))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3156
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3157 ((fboundp parse)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3158 ;; A hook function. Call it.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3159 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3160 (condition-case error-var
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3161 (funcall parse env)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3162 (error (format "HOOK ERROR: %s" (cdr error-var))))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3163 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3164 "ILLEGAL VALUE OF PARSE"))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3165
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3166 (defun reftex-where-am-I ()
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3167 ;; Return the docstruct entry above point. Actually returns a cons
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3168 ;; cell in which the cdr is a flag indicating if the information is
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3169 ;; exact (t) or approximate (nil).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3170 (interactive)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3171
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3172 (let ((docstruct (symbol-value reftex-docstruct-symbol))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3173 (cnt 0) rtn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3174 found)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3175 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3176 (while (not rtn)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3177 (incf cnt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3178 (setq found (re-search-backward reftex-everything-regexp nil t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3179 (setq rtn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3180 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3181 ((not found)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3182 ;; no match
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3183 (or
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3184 (car (member (list 'bof (buffer-file-name)) docstruct))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3185 (not (setq cnt 2))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3186 (assq 'bof docstruct) ;; for safety reasons
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3187 'corrupted))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3188 ((match-end 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3189 ;; Label
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3190 (assoc (reftex-match-string 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3191 (symbol-value reftex-docstruct-symbol)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3192 ((match-end 3)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3193 ;; Section
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3194 (goto-char (1- (match-beginning 3)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3195 (let* ((list (member (list 'bof (buffer-file-name))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3196 docstruct))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3197 (endelt (car (member (list 'eof (buffer-file-name))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3198 list)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3199 rtn1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3200 (while (and list (not (eq endelt (car list))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3201 (if (and (eq (car (car list)) 'toc)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3202 (string= (buffer-file-name)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3203 (nth 3 (car list))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3204 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3205 ((equal (point)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3206 (or (and (markerp (nth 4 (car list)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3207 (marker-position (nth 4 (car list))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3208 (nth 8 (car list))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3209 ;; Fits with marker position or recorded position
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3210 (setq rtn1 (car list) list nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3211 ((looking-at (reftex-make-regexp-allow-for-ctrl-m
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3212 (nth 7 (car list))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3213 ;; Same title
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3214 (setq rtn1 (car list) list nil cnt 2))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3215 (pop list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3216 rtn1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3217 ((match-end 7)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3218 ;; Input or include...
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3219 (car
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3220 (member (list 'eof (reftex-find-tex-file
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3221 (reftex-match-string 7)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3222 (cons
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3223 (cdr (assq 'master-dir docstruct))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3224 reftex-tex-path)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3225 docstruct)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3226 ((match-end 8)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3227 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3228 (goto-char (match-end 8))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3229 (assoc (reftex-no-props
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3230 (reftex-nth-arg-wrapper
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3231 (reftex-match-string 8)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3232 (symbol-value reftex-docstruct-symbol))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3233 (t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3234 (error "This should not happen (reftex-where-am-I)"))))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3235 (cons rtn (eq cnt 1))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3236
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3237 (defun reftex-parse-args (macro)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3238 ;; Return a list of macro name, nargs, arg-nr which is label and a list of
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3239 ;; optional argument indices.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3240 (if (string-match "[[{]\\*?[]}]" macro)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3241 (progn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3242 (let ((must-match (substring macro 0 (match-beginning 0)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3243 (args (substring macro (match-beginning 0)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3244 opt-list nlabel (cnt 0))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3245 (while (string-match "\\`[[{]\\(\\*\\)?[]}]" args)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3246 (incf cnt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3247 (when (eq ?\[ (string-to-char args))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3248 (push cnt opt-list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3249 (when (and (match-end 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3250 (not nlabel))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3251 (setq nlabel cnt))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3252 (setq args (substring args (match-end 0))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3253 (list must-match cnt nlabel opt-list)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3254 nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3255
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3256 (defsubst reftex-move-to-next-arg (&optional ignore)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3257 ;; Assuming that we are at the end of a macro name or a macro argument,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3258 ;; move forward to the opening parenthesis of the next argument.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3259 ;; This function understands the splitting of macros over several lines
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3260 ;; in TeX.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3261 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3262 ;; Just to be quick:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3263 ((memq (following-char) '(?\[ ?\{)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3264 ;; Do a search
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3265 ((looking-at "[ \t]*[\n\r]?\\([ \t]*%[^\n\r]*[\n\r]\\)*[ \t]*[[{]")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3266 (goto-char (1- (match-end 0)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3267 t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3268 (t nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3269
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3270 (defsubst reftex-move-to-previous-arg (&optional bound)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3271 ;; Assuming that we are in front of a macro argument,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3272 ;; move backward to the closing parenthesis of the previous argument.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3273 ;; This function understands the splitting of macros over several lines
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3274 ;; in TeX.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3275 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3276 ;; Just to be quick:
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3277 ((memq (preceding-char) '(?\] ?\})))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3278 ;; Do a search
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3279 ((re-search-backward
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3280 "[]}][ \t]*[\n\r]?\\([ \t]*%[^\n\r]*[\n\r]\\)*[ \t]*\\=" bound t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3281 (goto-char (1+ (match-beginning 0)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3282 t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3283 (t nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3284
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3285 (defun reftex-nth-arg-wrapper (key)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3286 (let ((entry (assoc key reftex-env-or-mac-alist)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3287 (reftex-nth-arg (nth 5 entry) (nth 6 entry))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3288
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3289 (defun reftex-nth-arg (n &optional opt-args)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3290 ;; Return the nth following {} or [] parentheses content.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3291 ;; OPT-ARGS is a list of argument numbers which are optional.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3292
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3293 ;; If we are sitting at a macro start, skip to end of macro name.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3294 (and (eq (following-char) ?\\) (skip-chars-forward "a-zA-Z*\\\\"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3295
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3296 (if (= n 1000)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3297 ;; Special case: Skip all touching arguments
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3298 (progn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3299 (reftex-move-over-touching-args)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3300 (reftex-context-substring))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3301
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3302 ;; Do the real thing.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3303 (let ((cnt 1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3304
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3305 (when (reftex-move-to-next-arg)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3306
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3307 (while (< cnt n)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3308 (while (and (member cnt opt-args)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3309 (eq (following-char) ?\{))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3310 (incf cnt))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3311 (when (< cnt n)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3312 (unless (and (condition-case nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3313 (or (forward-list 1) t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3314 (error nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3315 (reftex-move-to-next-arg)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3316 (incf cnt))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3317 (setq cnt 1000))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3318
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3319 (while (and (memq cnt opt-args)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3320 (eq (following-char) ?\{))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3321 (incf cnt)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3322 (if (and (= n cnt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3323 (> (skip-chars-forward "{\\[") 0))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3324 (reftex-context-substring)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3325 nil))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3326
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3327 (defun reftex-move-over-touching-args ()
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3328 (condition-case nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3329 (while (memq (following-char) '(?\[ ?\{))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3330 (forward-list 1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3331 (error nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3332
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3333 (defun reftex-context-substring ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3334 ;; Return up to 100 chars from point
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3335 ;; When point is just after a { or [, limit string to matching parenthesis
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3336 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3337 ((or (= (preceding-char) ?\{)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3338 (= (preceding-char) ?\[))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3339 ;; Inside a list - get only the list.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3340 (buffer-substring-no-properties
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3341 (point)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3342 (min (reftex-fp 150)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3343 (point-max)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3344 (condition-case nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3345 (progn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3346 (up-list 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3347 (1- (point)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3348 (error (point-max))))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3349 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3350 ;; no list - just grab 100 characters
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3351 (buffer-substring-no-properties (point) (min (reftex-fp 150) (point-max))))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3352
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3353 (defun reftex-init-section-numbers (&optional toc-entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3354 ;; Initialize the section numbers with zeros or with what is found
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3355 ;; in the toc entry.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3356 (let* ((level (or (nth 5 toc-entry) -1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3357 (numbers (nreverse (split-string (or (nth 6 toc-entry) "") "\\.")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3358 (depth (1- (length reftex-section-numbers)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3359 (i depth))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3360 (while (>= i 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3361 (if (> i level)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3362 (aset reftex-section-numbers i 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3363 (aset reftex-section-numbers i (string-to-int (or (car numbers) "0")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3364 (pop numbers))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3365 (decf i))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3366
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3367 (defun reftex-section-number (section-numbers &optional level star)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3368 ;; Return a string with the current section number.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3369 ;; When LEVEL is non-nil, increase section numbers on that level.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3370 (let* ((depth (1- (length section-numbers))) idx n (string ""))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3371 (when level
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3372 (when (and (> level -1) (not star))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3373 (aset section-numbers level (1+ (aref section-numbers level))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3374 (setq idx (1+ level))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3375 (while (<= idx depth)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3376 (aset section-numbers idx 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3377 (incf idx)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3378 (setq idx 0)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3379 (while (<= idx depth)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3380 (setq n (aref section-numbers idx))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3381 (setq string (concat string (if (not (string= string "")) "." "")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3382 (int-to-string n)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3383 (incf idx))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3384 (save-match-data
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3385 (if (string-match "\\`\\(0\\.\\)+" string)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3386 (setq string (replace-match "" nil nil string)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3387 (if (string-match "\\(\\.0\\)+\\'" string)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3388 (setq string (replace-match "" nil nil string))))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3389 (if star
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3390 (concat (make-string (1- (length string)) ?\ ) "*")
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3391 string)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3392
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3393 ;; A variable to remember the index of the last label context shown
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3394 (defvar reftex-last-cnt 0)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3395
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3396 (defun reftex-select-label-callback (cnt)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3397 ;; Callback function called from the label selection in order to
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3398 ;; show context in another window
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3399 (let* ((this-window (selected-window))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3400 index entry label file buffer re)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3401 ;; pop to original buffer in order to get correct variables
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3402 (catch 'exit
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3403 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3404 (set-buffer reftex-call-back-to-this-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3405 (setq index (nth (or cnt 1) reftex-label-index-list)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3406 entry (nth index (symbol-value reftex-docstruct-symbol))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3407 label (nth 0 entry)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3408 file (nth 3 entry)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3409
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3410 ;; goto the file in another window
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3411 (setq buffer (reftex-get-file-buffer-force
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3412 file (not reftex-keep-temporary-buffers)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3413 (if buffer
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3414 ;; good - the file is available
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3415 (switch-to-buffer-other-window buffer)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3416 ;; we have got a problem here. The file does not exist.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3417 ;; Let' get out of here..
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3418 (ding)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3419 (throw 'exit nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3420
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3421
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3422 ;; search for that label
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3423 (setq re (format reftex-find-label-regexp-format (regexp-quote label)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3424 (unless (and (integerp cnt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3425 (integerp reftex-last-cnt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3426 (if (> cnt reftex-last-cnt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3427 (re-search-forward re nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3428 (re-search-backward re nil t)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3429 (goto-char (point-min))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3430 (unless (re-search-forward re nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3431 ;; Ooops. Must be in a macro with distributed args.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3432 (re-search-forward (format reftex-find-label-regexp-format2
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3433 (regexp-quote label)) nil t)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3434 (when (match-end 3)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3435 (reftex-highlight 0 (match-beginning 3) (match-end 3))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3436 (reftex-show-entry (- (point) (match-beginning 3))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3437 (- (point) (match-end 3)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3438 (recenter (/ (window-height) 2)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3439 (select-window this-window))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3440
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3441 (defun reftex-pop-to-label (label file-list &optional mark-to-kill highlight)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3442 ;; Find LABEL in any file in FILE-LIST in another window.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3443 ;; If mark-to-kill is non-nil, mark new buffer for killing.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3444 ;; If HIGHLIGHT is non-nil, highlight the label definition.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3445 (let* ((re1 (format reftex-find-label-regexp-format (regexp-quote label)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3446 (re2 (format reftex-find-label-regexp-format2 (regexp-quote label)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3447 (re-list (list re1 re2)) re
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3448 (file-list-1 file-list)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3449 file buf)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3450 (catch 'exit
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3451 (while (setq re (pop re-list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3452 (setq file-list file-list-1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3453 (while (setq file (pop file-list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3454 (unless (setq buf (reftex-get-file-buffer-force file mark-to-kill))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3455 (error "No such file %s" file))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3456 (set-buffer buf)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3457 (widen)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3458 (goto-char (point-min))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3459 (when (re-search-forward re nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3460 (switch-to-buffer-other-window buf)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3461 (goto-char (match-beginning 0))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3462 (recenter (/ (window-height) 2))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3463 (if highlight
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3464 (reftex-highlight 0 (match-beginning 3) (match-end 3)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3465 (throw 'exit (selected-window)))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3466 (error "Label %s not found" label))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3467
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3468 (defun reftex-find-duplicate-labels ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3469 "Produce a list of all duplicate labels in the document."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3470
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3471 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3472
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3473 ;; Rescan the document to make sure
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3474 (reftex-access-scan-info t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3475
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3476 (let ((master (reftex-TeX-master-file))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3477 (cnt 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3478 (dlist
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3479 (mapcar
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3480 '(lambda(x)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3481 (let (x1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3482 (cond
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3483 ((memq (car x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3484 '(toc bof eof bib label-numbers xr xr-doc
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3485 master-dir file-error is-multi))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3486 nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3487 (t
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3488 (setq x1 (reftex-all-assoc-string
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3489 (car x) (symbol-value reftex-docstruct-symbol)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3490 (if (< 1 (length x1))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3491 (append (list (car x))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3492 (mapcar '(lambda(x)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3493 (abbreviate-file-name (nth 3 x))) x1))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3494 (list nil))))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3495 (reftex-uniquify (symbol-value reftex-docstruct-symbol)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3496
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3497 (setq dlist (reftex-uniquify dlist))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3498 (if (null dlist) (error "No duplicate labels in document"))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3499 (switch-to-buffer-other-window "*Duplicate Labels*")
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3500 (make-local-variable 'TeX-master)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3501 (setq TeX-master master)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3502 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3503 (insert " MULTIPLE LABELS IN CURRENT DOCUMENT:\n")
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3504 (insert
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3505 " Move point to label and type `r' to run a query-replace on the label\n"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3506 " and its references. Type `q' to exit this buffer.\n\n")
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3507 (insert " LABEL FILE\n")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3508 (insert " -------------------------------------------------------------\n")
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3509 (use-local-map (make-sparse-keymap))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3510 (local-set-key [?q] '(lambda () (interactive)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3511 (kill-buffer (current-buffer)) (delete-window)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3512 (local-set-key [?r] 'reftex-change-label)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3513 (while dlist
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3514 (when (and (car (car dlist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3515 (cdr (car dlist)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3516 (incf cnt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3517 (insert (mapconcat '(lambda(x) x) (car dlist) "\n ") "\n"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3518 (pop dlist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3519 (goto-char (point-min))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3520 (when (= cnt 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3521 (kill-buffer (current-buffer))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3522 (delete-window)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3523 (message "Document does not contain duplicate labels."))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3524
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3525 (defun reftex-all-assq (key list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3526 ;; Return a list of all associations of KEY in LIST. Comparison with string=
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3527 (let (rtn)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3528 (while (setq list (memq (assq key list) list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3529 (push (car list) rtn)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3530 (pop list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3531 (nreverse rtn)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3532
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3533 (defun reftex-all-assoc-string (key list)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3534 ;; Return a list of all associations of KEY in LIST. Comparison with string=
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3535 (let (rtn)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3536 (while list
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3537 (if (string= (car (car list)) key)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3538 (push (car list) rtn))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3539 (pop list))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3540 (nreverse rtn)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3541
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3542 (defun reftex-kill-temporary-buffers (&optional buffer)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3543 ;; Kill all buffers in the list reftex-kill-temporary-buffers.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3544 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3545 (buffer
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3546 (when (member buffer reftex-buffers-to-kill)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3547 (kill-buffer buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3548 (setq reftex-buffers-to-kill
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3549 (delete buffer reftex-buffers-to-kill))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3550 (t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3551 (while (setq buffer (pop reftex-buffers-to-kill))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3552 (when (bufferp buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3553 (and (buffer-modified-p buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3554 (y-or-n-p (format "Save file %s? "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3555 (buffer-file-name buffer)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3556 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3557 (set-buffer buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3558 (save-buffer)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3559 (kill-buffer buffer))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3560 (pop reftex-buffers-to-kill)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3561
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3562 (defun reftex-show-entry (beg-hlt end-hlt)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3563 ;; Show entry if point is hidden by outline mode
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3564 (let* ((pos (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3565 (n (/ (window-height) 2))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3566 (beg (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3567 (re-search-backward "[\n\r]" nil 1 n) (point)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3568 (end (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3569 (re-search-forward "[\n\r]" nil 1 n) (point))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3570 (if (and reftex-auto-show-entry
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3571 (string-match
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3572 "\r" (buffer-substring beg end)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3573 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3574 ((eq t reftex-auto-show-entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3575 (subst-char-in-region
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3576 (save-excursion (search-backward "\n" nil t) (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3577 (save-excursion (search-forward "\n" nil t) (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3578 ?\r ?\n t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3579 ((eq reftex-auto-show-entry 'copy)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3580 (let ((string (buffer-substring beg end)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3581 (switch-to-buffer "*RefTeX Context Copy*")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3582 (setq buffer-read-only nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3583 (erase-buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3584 (insert string)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3585 (subst-char-in-region (point-min) (point-max) ?\r ?\n t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3586 (goto-char (- pos beg))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3587 (reftex-highlight 0 (1+ (- (point) beg-hlt))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3588 (1+ (- (point) end-hlt)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3589 (when (reftex-refontify)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3590 (make-local-variable 'font-lock-defaults)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3591 (setq font-lock-defaults nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3592 (let ((major-mode 'latex-mode))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3593 (font-lock-set-defaults)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3594 (font-lock-fontify-buffer)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3595 (setq buffer-read-only t)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3596 ))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3597
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3598 (defun reftex-nicify-text (text)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3599 ;; Make TEXT nice for inclusion as context into label menu
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3600 (while (string-match "[\n\r\t]\\|[ \t][ \t]+" text) ; remove extra whitespace
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3601 (setq text (replace-match " " nil t text)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3602 (if (string-match "\\\\end{.*" text) ; nothing beyond \end{
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3603 (setq text (replace-match "" nil t text)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3604 (if (string-match "\\\\label{[^}]*}" text) ; kill the label
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3605 (setq text (replace-match "" nil t text)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3606 (if (string-match "\\`[ }]+" text) ; leading whitespace, `}'
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3607 (setq text (replace-match "" nil t text)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3608 (cond
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3609 ((> (length text) 100) (substring text 0 100))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3610 ((= (length text) 0) " ")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3611 (t text)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3612
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3613 (defun reftex-typekey-check (typekey conf-variable &optional n)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3614 ;; Check if CONF-VARIABLE is true or contains TYPEKEY
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3615 (and n (setq conf-variable (nth n conf-variable)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3616 (or (eq conf-variable t)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3617 (and (stringp conf-variable)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3618 (string-match (concat "[" conf-variable "]") typekey))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3619
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3620 ;;; ===========================================================================
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3621 ;;;
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3622 ;;; Table of contents
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3623
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3624 ;; We keep at most one *toc* buffer - it is easy to make them
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3625
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3626 (defvar reftex-last-toc-master nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3627 "Stores the name of the tex file that `reftex-toc' was last run on.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3628
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3629 (defvar reftex-last-toc-file nil
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3630 "Stores the file name from which `reftex-toc' was called. For redo command.")
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3631
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3632 (defvar reftex-last-window-height nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3633
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3634 (defvar reftex-toc-return-marker (make-marker)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3635 "Marker which makes it possible to return from toc to old position.")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3636
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3637 (defconst reftex-toc-help
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3638 " AVAILABLE KEYS IN TOC BUFFER
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3639 ============================
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3640 SPC Show the corresponding section of the LaTeX document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3641 TAB Goto the section.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3642 RET Goto the section and hide the *toc* buffer (also on mouse-2).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3643 q / Q Hide/Kill *toc* buffer, return to position of last reftex-toc command.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3644 f Toggle follow mode on and off.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3645 r / g Reparse the LaTeX document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3646 x Switch to TOC of external document (with LaTeX package `xr').")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3647
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3648 (defun reftex-toc ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3649 "Show the table of contents for the current document.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3650 When called with a raw C-u prefix, rescan the document first."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3651
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3652 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3653
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3654 (if (or (not (string= reftex-last-toc-master (reftex-TeX-master-file)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3655 current-prefix-arg)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3656 (reftex-empty-toc-buffer))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3657
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3658 (setq reftex-last-toc-file (buffer-file-name))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3659 (setq reftex-last-toc-master (reftex-TeX-master-file))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3660
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3661 (set-marker reftex-toc-return-marker (point))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3662
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3663 ;; If follow mode is active, arrange to delay it one command
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3664 (if reftex-toc-follow-mode
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3665 (setq reftex-toc-follow-mode 1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3666
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3667 ;; Ensure access to scanning info and rescan buffer if prefix are is '(4)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3668 (reftex-access-scan-info current-prefix-arg)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3669
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3670 (let* ((all (symbol-value reftex-docstruct-symbol))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3671 (xr-data (assq 'xr all))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3672 (xr-alist (cons (cons "" (buffer-file-name)) (nth 1 xr-data)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3673 (where (reftex-nearest-section))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3674 toc1 cell startpos)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3675
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3676 (if (get-buffer-window "*toc*")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3677 (select-window (get-buffer-window "*toc*"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3678 (setq reftex-last-window-height (window-height)) ; remember
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3679 (split-window-vertically)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3680 (switch-to-buffer (get-buffer-create "*toc*")))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3681
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3682 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3683 ;; buffer is empty - fill it with the table of contents
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3684 ((= (buffer-size) 0)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3685
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3686 (local-set-key "?" 'reftex-toc-show-help)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3687 (local-set-key " " 'reftex-toc-view-line)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3688 (local-set-key "\C-m" 'reftex-toc-goto-line-and-hide)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3689 (local-set-key "\C-i" 'reftex-toc-goto-line)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3690 (local-set-key "r" 'reftex-toc-redo)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3691 (local-set-key "R" 'reftex-toc-Redo)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3692 (local-set-key "g" 'revert-buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3693 (local-set-key "q" 'reftex-toc-quit)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3694 (local-set-key "Q" 'reftex-toc-quit-and-kill)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3695 (local-set-key "f" 'reftex-toc-toggle-follow)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3696 (local-set-key "x" 'reftex-toc-external)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3697 (local-set-key [(mouse-2)] 'reftex-toc-mouse-goto-line-and-hide); Emacs
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3698 (local-set-key [(button2)] 'reftex-toc-mouse-goto-line-and-hide); XEmacs
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3699 (make-local-variable 'revert-buffer-function)
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3700 (setq revert-buffer-function 'reftex-toc-redo)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3701 (setq truncate-lines t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3702 (make-local-hook 'post-command-hook)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3703 (make-local-hook 'pre-command-hook)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3704 (setq post-command-hook '(reftex-toc-post-command-hook))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3705 (setq pre-command-hook '(reftex-toc-pre-command-hook))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3706
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3707 (insert (format
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3708 "TABLE-OF-CONTENTS on %s
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3709 SPC=view TAB=goto RET=goto+hide [q]uit [r]escan [f]ollow-mode e[x]tern [?]Help
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3710 -------------------------------------------------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3711 " (abbreviate-file-name reftex-last-toc-master)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3712 (setq startpos (point))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3713
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3714 (if (reftex-use-fonts)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3715 (put-text-property 1 (point) 'face 'font-lock-keyword-face))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3716 (put-text-property 1 (point) 'intangible t)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3717 (put-text-property 1 2 'xr-alist xr-alist)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3718
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3719 (while all
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3720 (setq cell (car all)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3721 all (cdr all))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3722 (when (eq (car cell) 'toc)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3723 (setq toc1 (concat (nth 2 cell) "\n"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3724 (put-text-property 0 (length toc1) 'toc cell toc1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3725 (insert toc1)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3726
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3727 (backward-delete-char 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3728
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3729 (setq buffer-read-only t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3730 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3731 (goto-line 3)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3732 (beginning-of-line)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3733 (setq startpos (point))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3734
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3735 ;; Find the correct section
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3736 (goto-char (point-max))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3737 (beginning-of-line)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3738 (while (and (> (point) startpos)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3739 (not (eq (get-text-property (point) 'toc) where)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3740 (beginning-of-line 0))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3741
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3742 (defun reftex-nearest-section ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3743 ;; Return (file . find) of nearest section command
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3744 (let* ((here-I-am (car (reftex-where-am-I))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3745 (reftex-last-assoc-before-elt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3746 'toc here-I-am (symbol-value reftex-docstruct-symbol))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3747
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3748 (defun reftex-toc-pre-command-hook ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3749 ;; used as pre command hook in *toc* buffer
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3750 (reftex-unhighlight 0)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3751 (reftex-unhighlight 1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3752
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3753 (defun reftex-toc-post-command-hook ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3754 ;; used in the post-command-hook for the *toc* buffer
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3755 (and (> (point) 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3756 (save-excursion
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3757 (reftex-highlight 1
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3758 (progn (beginning-of-line) (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3759 (progn (end-of-line) (point)))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3760 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3761 ((integerp reftex-toc-follow-mode)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3762 ;; remove delayed action
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3763 (setq reftex-toc-follow-mode t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3764 (reftex-toc-follow-mode
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3765 ;; show context in other window
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3766 (condition-case nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3767 (reftex-toc-visit-line)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3768 (error (ding) t)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3769
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3770 (defun reftex-empty-toc-buffer ()
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3771 (if (get-buffer "*toc*")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3772 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3773 (set-buffer "*toc*")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3774 (setq buffer-read-only nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3775 (erase-buffer))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3776
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3777 (defun reftex-re-enlarge ()
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3778 (enlarge-window
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3779 (max 0 (- (or reftex-last-window-height (window-height))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3780 (window-height)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3781
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3782 (defun reftex-toc-show-help ()
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3783 (interactive)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3784 (with-output-to-temp-buffer "*RefTeX Help*"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3785 (princ reftex-toc-help))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3786 ;; If follow mode is active, arrange to delay it one command
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3787 (if reftex-toc-follow-mode
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3788 (setq reftex-toc-follow-mode 1)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3789
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3790 (defun reftex-toc-toggle-follow ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3791 "Toggle toc-follow mode.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3792 (It is not really a mode, just a flag)."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3793 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3794 (setq reftex-toc-follow-mode (not reftex-toc-follow-mode)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3795 (defun reftex-toc-view-line ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3796 "View document location in other window."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3797 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3798 (reftex-toc-visit-line))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3799 (defun reftex-toc-goto-line-and-hide ()
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3800 "Go to document location in other window. Hide the *toc* window."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3801 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3802 (reftex-toc-visit-line 'hide))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3803 (defun reftex-toc-goto-line ()
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3804 "Go to document location in other window. Hide the *toc* window."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3805 (interactive)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3806 (reftex-toc-visit-line t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3807 (defun reftex-toc-mouse-goto-line-and-hide (ev)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3808 "Go to document location in other window. Hide the *toc* window."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3809 (interactive "e")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3810 (mouse-set-point ev)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3811 (reftex-toc-visit-line 'hide))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3812 (defun reftex-toc-quit ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3813 "Hide the *toc* window and do not move point."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3814 (interactive)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3815 (or (one-window-p) (delete-window))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3816 (switch-to-buffer (marker-buffer reftex-toc-return-marker))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3817 (reftex-re-enlarge)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3818 (goto-char (or (marker-position reftex-toc-return-marker) (point))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3819 (defun reftex-toc-quit-and-kill ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3820 "Kill the *toc* buffer."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3821 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3822 (kill-buffer "*toc*")
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3823 (or (one-window-p) (delete-window))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3824 (switch-to-buffer (marker-buffer reftex-toc-return-marker))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3825 (reftex-re-enlarge)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3826 (goto-char (marker-position reftex-toc-return-marker)))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3827 (defun reftex-toc-redo (&rest ignore)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3828 "Regenerate the *toc* buffer by reparsing file of last reftex-toc command."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3829 (interactive)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3830 (if reftex-enable-partial-scans
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3831 (let ((file (nth 3 (get-text-property (point) 'toc))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3832 (if (not file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3833 (error "Don't know which file to rescan. Try `R'.")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3834 (switch-to-buffer-other-window
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3835 (reftex-get-file-buffer-force file))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3836 (setq current-prefix-arg '(4))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3837 (reftex-toc)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3838 (reftex-toc-Redo))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3839 (reftex-kill-temporary-buffers))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3840 (defun reftex-toc-Redo (&rest ignore)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3841 "Regenerate the *toc* buffer by reparsing the entire document."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3842 (interactive)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3843 (switch-to-buffer-other-window
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3844 (reftex-get-file-buffer-force reftex-last-toc-file))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3845 (setq current-prefix-arg '(16))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3846 (reftex-toc))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3847 (defun reftex-toc-external (&rest ignore)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3848 "Switch to table of contents of an external document."
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3849 (interactive)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3850 (let* ((xr-alist (get-text-property 1 'xr-alist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3851 (xr-index (reftex-select-external-document
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3852 xr-alist 0)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3853 (switch-to-buffer-other-window (or (reftex-get-file-buffer-force
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3854 (cdr (nth xr-index xr-alist)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3855 (error "Cannot switch document")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3856 (reftex-toc)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3857
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3858 (defun reftex-toc-visit-line (&optional final)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3859 ;; Visit the tex file corresponding to the toc entry on the current line.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3860 ;; If FINAL is t, stay there
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3861 ;; If FINAL is 'hide, hide the *toc* window.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3862 ;; Otherwise, move cursor back into *toc* window.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3863 ;; This function is pretty clever about finding back a section heading,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3864 ;; even if the buffer is not live, or things like outline, x-symbol etc.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3865 ;; have been active.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3866
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3867 (let* ((toc (get-text-property (point) 'toc))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3868 (file (nth 3 toc))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3869 (marker (nth 4 toc))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3870 (level (nth 5 toc))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3871 (literal (nth 7 toc))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3872 (emergency-point (nth 8 toc))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3873 (toc-window (selected-window))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3874 show-window show-buffer match)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3875
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3876 (unless toc (error "Don't know which toc line to visit"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3877
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3878 (setq match
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3879 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3880 ((and (markerp marker) (marker-buffer marker))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3881 ;; Buffer is still live and we have the marker. Should be easy.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3882 (switch-to-buffer-other-window (marker-buffer marker))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3883 (goto-char (marker-position marker))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3884 (or (looking-at (regexp-quote literal))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3885 (looking-at (reftex-make-regexp-allow-for-ctrl-m literal))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3886 (looking-at (reftex-make-desparate-section-regexp literal))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3887 (looking-at (concat "\\\\"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3888 (regexp-quote
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3889 (car (rassq level reftex-section-levels)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3890 "[[{]"))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3891 (t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3892 ;; Marker is lost. Use the backup method.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3893 (switch-to-buffer-other-window
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3894 (reftex-get-file-buffer-force file nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3895 (goto-char (or emergency-point (point-min)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3896 (or (looking-at (regexp-quote literal))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3897 (let ((pos (point)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3898 (re-search-backward "\\`\\|[\r\n][ \t]*[\r\n]" nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3899 (or (reftex-nearest-match (regexp-quote literal) pos)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3900 (reftex-nearest-match
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3901 (reftex-make-regexp-allow-for-ctrl-m literal) pos)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3902 (reftex-nearest-match
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3903 (reftex-make-desparate-section-regexp literal) pos)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3904 ))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3905
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3906 (setq show-window (selected-window)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3907 show-buffer (current-buffer))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3908
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3909 (unless match
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3910 (select-window toc-window)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3911 (error "Cannot find line"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3912
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3913 (goto-char (match-beginning 0))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3914 (recenter 1)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3915 (reftex-highlight 0 (match-beginning 0) (match-end 0) (current-buffer))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3916
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3917 (select-window toc-window)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3918
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3919 ;; use the `final' parameter to decide what to do next
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3920 (cond
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3921 ((eq final t)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3922 (reftex-unhighlight 0)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3923 (select-window show-window))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3924 ((eq final 'hide)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3925 (reftex-unhighlight 0)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3926 (or (one-window-p) (delete-window))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3927 (switch-to-buffer show-buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3928 (reftex-re-enlarge))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3929 (t nil))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3930
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3931 ;;; ===========================================================================
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3932 ;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3933 ;;; BibTeX citations.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3934
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3935 ;; Variables and constants
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3936
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3937 ;; Define variable to silence compiler warnings
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
3938 (defvar reftex-found-list)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3939 (defvar reftex-cite-format-builtin)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3940
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3941 ;; The history list of regular expressions used for citations
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3942 (defvar reftex-cite-regexp-hist nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3943
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3944 ;; Prompt and help string for citation selection
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3945 (defconst reftex-citation-prompt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3946 "Select: [n]ext [p]revious [r]estrict [ ]full_entry [q]uit RET [?]Help+more")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3947
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3948 (defconst reftex-citation-help
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3949 "AVAILABLE KEYS IN MAKE CITATION MENU
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3950 ---------------------------------------
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3951 n / p Go to next/previous entry (Cursor motion works as well).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3952 C-s / C-r Search forward/backward. Use repeated C-s/C-r as in isearch.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3953 g / r Start over with new regexp / Restrict with additional regexp.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3954 SPC Show full database entry in other window.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3955 f Toggle follow mode: Other window will follow with full db entry.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3956 q Quit without inserting \\cite macro into buffer.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3957 e Recursive edit into other window.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3958 RET / a Accept current entry / Accept all entries.")
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3959
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3960 ;; Find bibtex files
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3961
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3962 (defun reftex-get-bibfile-list ()
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3963 ;; Return list of bibfiles for current document.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3964 ;; When using the chapterbib or bibunits package you should either
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3965 ;; use the same database files everywhere, or separate parts using
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3966 ;; different databases into different files (included into the mater file).
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3967 ;; Then this function will return the applicable database files.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3968
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3969 ;; Ensure access to scanning info
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
3970 (reftex-access-scan-info)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3971 (or
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3972 ;; Try inside this file (and its includes)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3973 (cdr (reftex-last-assoc-before-elt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3974 'bib (list 'eof (buffer-file-name))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3975 (member (list 'bof (buffer-file-name))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3976 (symbol-value reftex-docstruct-symbol))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3977 ;; Try after the beginning of this file
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3978 (cdr (assq 'bib (member (list 'bof (buffer-file-name))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3979 (symbol-value reftex-docstruct-symbol))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3980 ;; Anywhere in the entire document
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3981 (cdr (assq 'bib (symbol-value reftex-docstruct-symbol)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3982 (error "\\bibliography statment missing or .bib files not found.")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3983
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3984 (defun reftex-find-tex-file (file master-dir &optional die)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3985 ;; Find FILE in MASTER-DIR or on reftex-tex-path.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3986 ;; FILE may be given without the .tex extension.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3987 (reftex-access-search-path "tex")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3988 (let* ((path (cons master-dir reftex-tex-path))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3989 file1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3990 (setq file1
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3991 (or (reftex-find-file-on-path (concat file ".tex") path)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3992 (reftex-find-file-on-path file path)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3993 (unless file1
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3994 (reftex-access-search-path "tex" t file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3995 (setq path (cons master-dir reftex-tex-path))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3996 (setq file1
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3997 (or (reftex-find-file-on-path (concat file ".tex") path)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3998 (reftex-find-file-on-path file path))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
3999 (cond (file1 file1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4000 (die (error "No such file: %s" file) nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4001 (t (message "No such file: %s (ignored)" file) nil))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4002
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4003 (defun reftex-find-bib-file (file master-dir &optional die)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4004 ;; Find FILE in MASTER-DIR or on reftex-bib-path
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4005 (reftex-access-search-path "bib")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4006 (let ((file1 (reftex-find-file-on-path
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4007 file (cons master-dir reftex-bib-path))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4008 (unless file1
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4009 (reftex-access-search-path "bib" t file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4010 (setq file1 (reftex-find-file-on-path
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4011 file (cons master-dir reftex-bib-path))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4012 (cond (file1 file1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4013 (die (error "No such file: %s" file) nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4014 (t (message "No such file: %s (ignored)" file) nil))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4015
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4016 ;; Find a certain reference in any of the BibTeX files.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4017
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4018 (defun reftex-pop-to-bibtex-entry (key file-list
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4019 &optional mark-to-kill highlight)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4020 ;; Find BibTeX KEY in any file in FILE-LIST in another window.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4021 ;; If mark-to-kill is non-nil, mark new buffer to kill."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4022
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4023 (let* ((re (concat "@[a-zA-Z]+[ \t\n\r]*[{(][ \t\n\r]*" (regexp-quote key) "[ \t\n\r,]"))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4024 (window-conf (current-window-configuration))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4025 file buf)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4026 (catch 'exit
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4027 (switch-to-buffer-other-window (current-buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4028 (while file-list
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4029 (setq file (car file-list)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4030 file-list (cdr file-list))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4031 (unless (setq buf (reftex-get-file-buffer-force file mark-to-kill))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4032 (error "No such file %s" file))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4033 (switch-to-buffer buf)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4034 (widen)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4035 (goto-char (point-min))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4036 (when (re-search-forward re nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4037 (goto-char (match-beginning 0))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4038 (recenter 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4039 (if highlight
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4040 (reftex-highlight 0 (match-beginning 0) (match-end 0)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4041 (throw 'exit (selected-window))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4042 (set-window-configuration window-conf)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4043 (beep)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4044 (message "No BibTeX entry with citation key %s" key))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4045
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4046 ;; Parse bibtex buffers
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4047
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4048 (defun reftex-extract-bib-entries (buffers &optional get-word)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4049 ;; Extract bib entries which match regexps from BUFFERS.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4050 ;; BUFFERS is a list of buffers or file names.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4051 ;; Return list with entries."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4052 (let* (re-list first-re rest-re
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4053 (buffer-list (if (listp buffers) buffers (list buffers)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4054 found-list entry buffer1 buffer alist
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4055 key-point start-point end-point)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4056
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4057 (setq re-list (split-string
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4058 (read-string "RegExp [ && RegExp...]: "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4059 nil 'reftex-cite-regexp-hist)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4060 "[ \t]*&&[ \t]*"))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4061
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4062 (setq first-re (car re-list) ; We'll use the first re to find things,
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4063 rest-re (cdr re-list)) ; the other to narrow down.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4064 (if (string-match "\\`[ \t]*\\'" first-re)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4065 (error "Empty regular expression"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4066
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4067 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4068 (save-window-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4069
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4070 ;; Walk through all bibtex files
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4071 (while buffer-list
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4072 (setq buffer (car buffer-list)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4073 buffer-list (cdr buffer-list))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4074 (if (and (bufferp buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4075 (buffer-live-p buffer))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4076 (setq buffer1 buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4077 (setq buffer1 (reftex-get-file-buffer-force
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4078 buffer (not reftex-keep-temporary-buffers))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4079 (if (not buffer1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4080 (error "Cannot find BibTeX file %s" buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4081 (message "Scanning bibliography database %s" buffer1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4082
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4083 (set-buffer buffer1)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4084 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4085 (goto-char (point-min))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4086 (while (re-search-forward first-re nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4087 (catch 'search-again
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4088 (setq key-point (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4089 (unless (re-search-backward
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4090 "\\(\\`\\|[\n\r]\\)[ \t]*@\\([a-zA-Z]+\\)[ \t\n\r]*[{(]" nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4091 (throw 'search-again nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4092 (setq start-point (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4093 (goto-char (match-end 0))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4094 (condition-case nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4095 (up-list 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4096 (error (goto-char key-point)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4097 (throw 'search-again nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4098 (setq end-point (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4099
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4100 ;; Ignore @string, @comment and @c entries or things
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4101 ;; outside entries
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4102 (when (or (string= (downcase (match-string 2)) "string")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4103 (string= (downcase (match-string 2)) "comment")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4104 (string= (downcase (match-string 2)) "c")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4105 (< (point) key-point)) ; this means match not in {}
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4106 (goto-char key-point)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4107 (throw 'search-again nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4108
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4109 ;; Well, we have got a match
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4110 (setq entry (concat
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4111 (buffer-substring start-point (point)) "\n"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4112
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4113 ;; Check if other regexp match as well
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4114 (setq re-list rest-re)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4115 (while re-list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4116 (unless (string-match (car re-list) entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4117 ;; nope - move on
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4118 (throw 'search-again nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4119 (pop re-list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4120
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4121 (setq alist (reftex-parse-bibtex-entry
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4122 nil start-point end-point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4123 (push (cons "&entry" entry) alist)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4124
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4125 ;; check for crossref entries
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4126 (if (assoc "crossref" alist)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4127 (setq alist
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4128 (append
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4129 alist (reftex-get-crossref-alist alist))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4130
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4131 ;; format the entry
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4132 (push (cons "&formatted" (reftex-format-bib-entry alist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4133 alist)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4134
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4135 ;; add it to the list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4136 (push alist found-list))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4137 (reftex-kill-temporary-buffers))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4138 (setq found-list (nreverse found-list))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4139
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4140 ;; Sorting
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4141 (cond
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4142 ((eq 'author reftex-sort-bibtex-matches)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4143 (sort found-list 'reftex-bib-sort-author))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4144 ((eq 'year reftex-sort-bibtex-matches)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4145 (sort found-list 'reftex-bib-sort-year))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4146 ((eq 'reverse-year reftex-sort-bibtex-matches)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4147 (sort found-list 'reftex-bib-sort-year-reverse))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4148 (t found-list))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4149
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4150 (defun reftex-bib-sort-author (e1 e2)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4151 (let ((al1 (reftex-get-bib-names "author" e1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4152 (al2 (reftex-get-bib-names "author" e2)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4153 (while (and al1 al2 (string= (car al1) (car al2)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4154 (pop al1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4155 (pop al2))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4156 (if (and (stringp (car al1))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4157 (stringp (car al2)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4158 (string< (car al1) (car al2))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4159 (not (stringp (car al1))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4160
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4161 (defun reftex-bib-sort-year (e1 e2)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4162 (< (string-to-int (cdr (assoc "year" e1)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4163 (string-to-int (cdr (assoc "year" e2)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4164
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4165 (defun reftex-bib-sort-year-reverse (e1 e2)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4166 (> (string-to-int (or (cdr (assoc "year" e1)) "0"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4167 (string-to-int (or (cdr (assoc "year" e2)) "0"))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4168
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4169 (defun reftex-get-crossref-alist (entry)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4170 ;; return the alist from a crossref entry
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4171 (let ((crkey (cdr (assoc "crossref" entry)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4172 start)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4173 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4174 (save-restriction
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4175 (widen)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4176 (if (re-search-forward
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4177 (concat "@\\w+[{(][ \t\n\r]*" (regexp-quote crkey)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4178 "[ \t\n\r]*,") nil t)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4179 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4180 (setq start (match-beginning 0))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4181 (condition-case nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4182 (up-list 1)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4183 (error nil))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4184 (reftex-parse-bibtex-entry nil start (point)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4185 nil)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4186
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4187 ;; Parse and format individual entries
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4188
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4189 (defun reftex-get-bib-names (field entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4190 ;; Return a list with the author or editor anmes in ENTRY
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4191 (let ((names (reftex-get-bib-field field entry)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4192 (if (equal "" names)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4193 (setq names (reftex-get-bib-field "editor" entry)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4194 (while (string-match "\\band\\b[ \t]*" names)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4195 (setq names (replace-match "\n" nil t names)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4196 (while (string-match "[\\.a-zA-Z\\-]+\\.[ \t]*\\|,.*\\|[{}]+" names)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4197 (setq names (replace-match "" nil t names)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4198 (while (string-match "^[ \t]+\\|[ \t]+$" names)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4199 (setq names (replace-match "" nil t names)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4200 (while (string-match "[ \t][ \t]+" names)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4201 (setq names (replace-match " " nil t names)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4202 (split-string names "\n")))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4203
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4204 (defun reftex-parse-bibtex-entry (entry &optional from to)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4205 (let (alist key start field)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4206 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4207 (save-restriction
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4208 (if entry
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4209 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4210 (switch-to-buffer "*RefTeX-scratch*")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4211 (fundamental-mode)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4212 (erase-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4213 (insert entry))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4214 (widen)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4215 (narrow-to-region from to))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4216 (goto-char (point-min))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4217
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4218 (if (re-search-forward
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4219 "@\\(\\w+\\)[ \t\n\r]*[{(][ \t\n\r]*\\([^ \t\n\r,]+\\)" nil t)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4220 (setq alist
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4221 (list
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4222 (cons "&type" (downcase (reftex-match-string 1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4223 (cons "&key" (reftex-match-string 2)))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4224 (while (re-search-forward "\\(\\w+\\)[ \t\n\r]*=[ \t\n\r]*" nil t)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4225 (setq key (downcase (reftex-match-string 1)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4226 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4227 ((= (following-char) ?{)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4228 (forward-char 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4229 (setq start (point))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4230 (condition-case nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4231 (up-list 1)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4232 (error nil)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4233 ((= (following-char) ?\")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4234 (forward-char 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4235 (setq start (point))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4236 (while (and (search-forward "\"" nil t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4237 (= ?\\ (char-after (- (point) 2))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4238 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4239 (setq start (point))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4240 (re-search-forward "[ \t\n\r,}]" nil 1)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4241 (setq field (buffer-substring-no-properties start (1- (point))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4242 ;; remove extra whitesp
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4243 (while (string-match "[\n\t\r]\\|[ \t][ \t]+" field)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4244 (setq field (replace-match " " nil t field)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4245 ;; remove leading garbage
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4246 (if (string-match "^[ \t{]+" field)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4247 (setq field (replace-match "" nil t field)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4248 ;; remove trailing garbage
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4249 (if (string-match "[ \t}]+$" field)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4250 (setq field (replace-match "" nil t field)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4251 (push (cons key field) alist))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4252 alist))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4253
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4254 (defun reftex-get-bib-field (fieldname entry)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4255 ;; Extract the field FIELDNAME from an ENTRY
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4256 (or (cdr (assoc fieldname entry))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4257 ""))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4258
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4259 (defun reftex-format-bib-entry (entry)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4260 ;; Format a BibTeX ENTRY so that it is nice to look at
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4261 (let*
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4262 ((auth-list (reftex-get-bib-names "author" entry))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4263 (authors (mapconcat '(lambda (x) x) auth-list ", "))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4264 (year (reftex-get-bib-field "year" entry))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4265 (title (reftex-get-bib-field "title" entry))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4266 (type (reftex-get-bib-field "&type" entry))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4267 (key (reftex-get-bib-field "&key" entry))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4268 (extra
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4269 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4270 ((equal type "article")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4271 (concat (reftex-get-bib-field "journal" entry) " "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4272 (reftex-get-bib-field "volume" entry) ", "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4273 (reftex-get-bib-field "pages" entry)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4274 ((equal type "book")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4275 (concat "book (" (reftex-get-bib-field "publisher" entry) ")"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4276 ((equal type "phdthesis")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4277 (concat "PhD: " (reftex-get-bib-field "school" entry)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4278 ((equal type "mastersthesis")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4279 (concat "Master: " (reftex-get-bib-field "school" entry)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4280 ((equal type "inbook")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4281 (concat "Chap: " (reftex-get-bib-field "chapter" entry)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4282 ", pp. " (reftex-get-bib-field "pages" entry)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4283 ((or (equal type "conference")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4284 (equal type "incollection")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4285 (equal type "inproceedings"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4286 (concat "in: " (reftex-get-bib-field "booktitle" entry)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4287 (t ""))))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4288 (setq authors (reftex-truncate authors 30 t t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4289 (when (reftex-use-fonts)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4290 (put-text-property 0 (length authors) 'face 'font-lock-keyword-face
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4291 authors)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4292 (put-text-property 0 (length title) 'face 'font-lock-comment-face
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4293 title)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4294 (put-text-property 0 (length extra) 'face 'font-lock-reference-face
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4295 extra))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4296 (concat key "\n " authors " " year " " extra "\n " title "\n\n")))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4297
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4298 ;; Make a citation
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4299
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4300 (defun reftex-citation (&optional no-insert)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4301 "Make a citation using BibTeX database files.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4302 After asking for a Regular Expression, it scans the buffers with
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4303 bibtex entries (taken from the \\bibliography command) and offers the
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4304 matching entries for selection. The selected entry is formated according
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4305 to `reftex-cite-format' and inserted into the buffer.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4306 If NO-INSERT is non-nil, nothing is inserted, only the selected key returned.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4307 The regular expression uses an expanded syntax: && is interpreted as `and'.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4308 Thus, `aaaa&&bbb' matches entries which contain both `aaaa' and `bbb'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4309 When this function is called with point inside the braces of a \\cite
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4310 command, it will add another key, ignoring the value of `reftex-cite-format'.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4311 When called with a numeric prefix, that many citations will be made and all
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4312 put into the same \\cite command.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4313 When called with just C-u as prefix, enforces rescan of buffer for
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4314 bibliography statement (e.g. if it was changed)."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4315
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4316 (interactive)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4317
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4318 ;; check for recursive edit
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4319 (reftex-check-recursive-edit)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4320
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4321 ;; if there is just 1 C-u prefix arg, force to rescan buffer
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4322 (reftex-access-scan-info current-prefix-arg)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4323
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4324 ;; Call reftex-do-citation, but protected
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4325 (unwind-protect
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4326 (reftex-do-citation current-prefix-arg no-insert)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4327 (reftex-kill-temporary-buffers)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4328
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4329 (defun reftex-do-citation (&optional arg no-insert)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4330 ;; This really does the work of reftex-citation.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4331
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4332 ;; Check if there is already a cite command at point and change cite format
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4333 ;; in order to only add another reference in the same cite command.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4334 (let (key format (macro (car (car (reftex-what-macro t)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4335 (if (and (stringp macro)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4336 (string-match "\\`\\\\cite\\|cite\\'" macro))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4337 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4338 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4339 ((or (not arg)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4340 (not (listp arg)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4341 (setq format
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4342 (concat
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4343 (if (not (or (= (preceding-char) ?{)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4344 (= (preceding-char) ?,)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4345 ","
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4346 "")
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4347 "%l"
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4348 (if (not (or (= (following-char) ?})
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4349 (= (following-char) ?,)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4350 ","
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4351 ""))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4352 (t
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4353 (setq format "%l"))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4354 ;; else: figure out the correct format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4355 (setq format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4356 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4357 ((stringp reftex-cite-format) reftex-cite-format)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4358 ((and (symbolp reftex-cite-format)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4359 (assq reftex-cite-format reftex-cite-format-builtin))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4360 (nth 2 (assq reftex-cite-format reftex-cite-format-builtin)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4361 (t reftex-cite-format)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4362 (if (listp format)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4363 (save-window-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4364 (with-output-to-temp-buffer "*RefTeX Select*"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4365 (princ "SELECT A CITATION FORMAT\n\n")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4366 (princ
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4367 (mapconcat
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4368 (function (lambda (x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4369 (format "[%c] %s %s" (car x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4370 (if (> (car x) 31) " " "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4371 (cdr x))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4372 format "\n")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4373 (setq key (read-char))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4374 (if (assq key format)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4375 (setq format (cdr (assq key format)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4376 (error "No citation format associated with key `%c'" key)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4377
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4378 (let* (entry cnt rtn ins-string re-list re
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4379 ;; scan bibtex files
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4380 (reftex-found-list (reftex-extract-bib-entries
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4381 (reftex-get-bibfile-list)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4382 (found-list-r nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4383 (unless reftex-found-list
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4384 (error "Sorry, no matches found"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4385
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4386 ;; remember where we came from
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4387 (setq reftex-call-back-to-this-buffer (current-buffer))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4388
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4389 ;; offer selection
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4390 (save-window-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4391 (switch-to-buffer-other-window "*RefTeX Select*")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4392 (erase-buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4393 (reftex-insert-bib-matches reftex-found-list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4394 (if (= 0 (buffer-size))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4395 (error "Sorry, no matches found"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4396 (setq truncate-lines t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4397 (goto-char 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4398 (if (catch 'exit
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4399 (while t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4400 (setq rtn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4401 (reftex-select-item
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4402 reftex-citation-prompt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4403 "^[^ \t\n\r]"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4404 4
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4405 reftex-citation-help
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4406 '(?r ?a ?g ?\C-m)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4407 nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4408 'reftex-bibtex-selection-callback nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4409 (setq key (car rtn)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4410 cnt (nth 1 rtn))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4411 (unless key (throw 'exit nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4412 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4413 ((eq key ?g)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4414 (setq reftex-found-list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4415 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4416 (set-buffer reftex-call-back-to-this-buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4417 (reftex-extract-bib-entries
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4418 (reftex-get-bibfile-list))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4419 (erase-buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4420 (reftex-insert-bib-matches reftex-found-list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4421 (if (= 0 (buffer-size))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4422 (error "Sorry, no matches found"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4423 (goto-char 1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4424
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4425 ((eq key ?r)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4426 ;; restrict with new regular expression
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4427 (setq re-list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4428 (split-string (read-string
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4429 "RegExp [ && RegExp...]: "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4430 nil 'reftex-cite-regexp-hist)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4431 "[ \t]*&&[ \t]*"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4432 (while re-list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4433 (setq re (car re-list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4434 re-list (cdr re-list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4435 (setq found-list-r
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4436 (delete ""
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4437 (mapcar
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4438 '(lambda (x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4439 (if (string-match
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4440 re (cdr (assoc "&entry" x)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4441 x
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4442 ""))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4443 reftex-found-list))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4444 (if found-list-r
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4445 (setq reftex-found-list found-list-r)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4446 (ding))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4447 (erase-buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4448 (reftex-insert-bib-matches reftex-found-list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4449 (goto-char 1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4450 ((eq key ?a)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4451 (setq entry 'all)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4452 (throw 'exit t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4453 ((or (eq key ?\C-m)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4454 (eq key 'return))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4455 (if cnt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4456 (setq entry (nth cnt reftex-found-list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4457 (setq entry nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4458 (throw 'exit t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4459 (t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4460 (ding)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4461 (progn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4462 ;; format the entry
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4463 (if (eq entry 'all)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4464 (setq ins-string
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4465 (mapconcat
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4466 '(lambda (entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4467 (reftex-format-citation entry format))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4468 reftex-found-list "\n"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4469 (setq ins-string (reftex-format-citation entry format))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4470 (setq ins-string "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4471 (message "Quit")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4472 (kill-buffer "*RefTeX Select*")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4473
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4474 (unless no-insert
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4475 (insert ins-string)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4476 (when (string-match "\\?" ins-string)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4477 (search-backward "?")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4478 (delete-char 1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4479 (message "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4480
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4481 ;; Check if the prefix arg was numeric, and call recursively
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4482 (when (and (integerp arg)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4483 (> arg 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4484 (re-search-backward
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4485 "\\\\\\([a-zA-Z]*cite\\|cite[a-zA-Z]*\\)\\**\\(\\[[^]]*\\]\\)*{\\([^}]*\\)" nil t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4486 (goto-char (match-end 0))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4487 (decf arg)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4488 (reftex-do-citation arg))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4489
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4490 ;; Return the citation key
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4491 (or (eq entry 'all)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4492 (reftex-get-bib-field "&key" entry)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4493
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4494 (defun reftex-insert-bib-matches (list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4495 ;; Insert the bib matches and number them correctly
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4496 (let ((cnt -1) tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4497 (mapcar '(lambda (x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4498 (setq tmp (cdr (assoc "&formatted" x)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4499 (incf cnt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4500 (put-text-property 0 (length tmp) 'cnt cnt tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4501 (insert tmp))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4502 list)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4503
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4504 (defun reftex-format-names (namelist n)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4505 (interactive)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4506 (let (last (len (length namelist)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4507 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4508 ((= 1 len) (car namelist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4509 ((> len n) (concat (car namelist) (nth 2 reftex-cite-punctuation)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4510 (t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4511 (setq n (min len n)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4512 last (nth (1- n) namelist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4513 (setcdr (nthcdr (- n 2) namelist) nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4514 (concat
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4515 (mapconcat 'identity namelist (nth 0 reftex-cite-punctuation))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4516 (nth 1 reftex-cite-punctuation)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4517 last)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4518
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4519 (defun reftex-format-citation (entry format)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4520 ;; Format a citation from the info in the BibTeX ENTRY
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4521
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4522 (unless (stringp format) (setq format "\\cite{%l}"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4523
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4524 (if (and reftex-comment-citations
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4525 (string-match "%l" reftex-cite-comment-format))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4526 (error "reftex-cite-comment-format contains illeagal %%l"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4527
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4528 (while (string-match
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4529 "\\(\\`\\|[^%]\\)\\(\\(%\\([0-9]*\\)\\([a-zA-Z]\\)\\)[.,;: ]*\\)"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4530 format)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4531 (let ((n (string-to-int (match-string 4 format)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4532 (l (string-to-char (match-string 5 format)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4533 rpl b e)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4534 (save-match-data
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4535 (setq rpl
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4536 (cond
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4537 ((= l ?l) (concat
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4538 (reftex-get-bib-field "&key" entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4539 (if reftex-comment-citations
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4540 reftex-cite-comment-format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4541 "")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4542 ((= l ?a) (reftex-format-names
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4543 (reftex-get-bib-names "author" entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4544 (or n 2)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4545 ((= l ?A) (car (reftex-get-bib-names "author" entry)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4546 ((= l ?b) (reftex-get-bib-field "booktitle" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4547 ((= l ?c) (reftex-get-bib-field "chapter" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4548 ((= l ?d) (reftex-get-bib-field "edition" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4549 ((= l ?e) (reftex-format-names
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4550 (reftex-get-bib-names "editor" entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4551 (or n 2)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4552 ((= l ?E) (car (reftex-get-bib-names "editor" entry)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4553 ((= l ?h) (reftex-get-bib-field "howpublished" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4554 ((= l ?i) (reftex-get-bib-field "institution" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4555 ((= l ?j) (reftex-get-bib-field "journal" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4556 ((= l ?k) (reftex-get-bib-field "key" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4557 ((= l ?m) (reftex-get-bib-field "month" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4558 ((= l ?n) (reftex-get-bib-field "number" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4559 ((= l ?o) (reftex-get-bib-field "organization" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4560 ((= l ?p) (reftex-get-bib-field "pages" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4561 ((= l ?P) (car (split-string
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4562 (reftex-get-bib-field "pages" entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4563 "[- .]+")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4564 ((= l ?s) (reftex-get-bib-field "school" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4565 ((= l ?u) (reftex-get-bib-field "publisher" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4566 ((= l ?r) (reftex-get-bib-field "address" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4567 ((= l ?t) (reftex-get-bib-field "title" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4568 ((= l ?v) (reftex-get-bib-field "volume" entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4569 ((= l ?y) (reftex-get-bib-field "year" entry)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4570
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4571 (if (string= rpl "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4572 (setq b (match-beginning 2) e (match-end 2))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4573 (setq b (match-beginning 3) e (match-end 3)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4574 (setq format (concat (substring format 0 b) rpl (substring format e)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4575 (while (string-match "%%" format)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4576 (setq format (replace-match "%" t t format)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4577 (while (string-match "[ ,.;:]*%<" format)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4578 (setq format (replace-match "" t t format)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4579 format)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4580
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4581 ;; This is slow and not recommended for follow mode
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4582 (defun reftex-bibtex-selection-callback (cnt)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4583 ;; Callback function to be called from the BibTeX selection, in
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4584 ;; order to display context. This function is relatively slow and not
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4585 ;; recommended for follow mode, just for individual lookups.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4586 (let ((win (selected-window))
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4587 (key (reftex-get-bib-field "&key" (nth cnt reftex-found-list)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4588 (bibfile-list (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4589 (set-buffer reftex-call-back-to-this-buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4590 (reftex-get-bibfile-list))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4591 (reftex-pop-to-bibtex-entry key bibfile-list
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4592 (not reftex-keep-temporary-buffers) t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4593 (select-window win)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4594
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4595 ;;; ===========================================================================
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4596 ;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4597 ;;; Here is the routine used for selection
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4598
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4599 ;; Marker for return point from recursive edit
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4600 (defvar reftex-recursive-edit-marker (make-marker))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4601
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4602 (defun reftex-check-recursive-edit ()
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4603 ;; Check if we are already in a recursive edit. Abort with helpful
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4604 ;; message if so.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4605 (if (marker-position reftex-recursive-edit-marker)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4606 (error
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4607 (substitute-command-keys
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4608 "In unfinished recursive edit. Finish (\\[exit-recursive-edit]) or abort (\\[abort-recursive-edit])."))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4609
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4610 (defun reftex-select-item (prompt next-re size help-string
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4611 event-list &optional offset
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4612 call-back cb-flag match-everywhere)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4613 ;; Select an item. Show PROMPT to user, find next item with NEXT-RE
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4614 ;; regular expression, return on any of the events listed in
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4615 ;; EVENT-LIST. The function returns the event along with an integer
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4616 ;; indicating which item was selected. When OFFSET is specified,
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4617 ;; starts at that item in the list. When CALL-BACK is given, it is a
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4618 ;; function which is called with the index of the element.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4619
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4620 (let* (key key-sq b e ev cnt last-cnt cmd skip-callback
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4621 (search-str "") tmp search-start matched forward mini-map last-key
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4622 (offset1 (or offset 1)) win1 win2)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4623
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4624 ;; Set up a minibuffer keymap for the search stuff
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4625 (setq mini-map (copy-keymap minibuffer-local-map))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4626 (define-key mini-map "\C-s"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4627 '(lambda () (interactive) (setq forward t) (exit-minibuffer)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4628 (define-key mini-map "\C-r"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4629 '(lambda () (interactive) (setq forward nil) (exit-minibuffer)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4630 (define-key mini-map "\C-m" 'exit-minibuffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4631
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4632 (setq ev
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4633 (catch 'exit
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4634 (save-window-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4635 (setq truncate-lines t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4636 (goto-char 1)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4637 (unless (re-search-forward next-re nil t offset1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4638 ;; in case the offset is illegal
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4639 (setq offset1 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4640 (re-search-forward next-re nil t offset1))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4641 (beginning-of-line 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4642 (while t
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4643 (setq last-cnt (or cnt last-cnt))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4644 (setq cnt (get-text-property (point) 'cnt))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4645 (if (and cnt cb-flag call-back (not skip-callback))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4646 (funcall call-back cnt))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4647 (setq skip-callback nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4648 (if cnt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4649 (setq b (or (previous-single-property-change
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4650 (1+ (point)) 'cnt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4651 (point-min))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4652 e (or (next-single-property-change
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4653 (point) 'cnt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4654 (point-max)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4655 (setq b (point) e (point)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4656 (reftex-highlight 1 b e)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4657 (if (or (not (pos-visible-in-window-p b))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4658 (not (pos-visible-in-window-p e)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4659 (recenter (/ (window-height) 2)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4660 (setq key-sq (read-key-sequence prompt))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4661 (setq last-key key)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4662 (setq key (car
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4663 (cond
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4664 ((fboundp 'event-to-character) ; XEmacs
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4665 (mapcar 'event-to-character key-sq))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4666 ((fboundp 'listify-key-sequence) ; Emacs
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4667 (listify-key-sequence key-sq))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4668 (t (error "Please report this problem to dominik@strw.leidenuniv.nl")))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4669
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4670 (setq cmd (key-binding key-sq))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4671
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4672 (reftex-unhighlight 2)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4673 (reftex-unhighlight 0)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4674
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4675 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4676
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4677 ;; Single line motions
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4678 ((or (eq key ?n)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4679 (eq key ?\C-i)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4680 (eq cmd 'next-line))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4681 (or (eobp) (forward-char 1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4682 (re-search-forward next-re nil t 1)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4683 (beginning-of-line 1))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4684 ((or (eq key ?p)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4685 (eq cmd 'previous-line))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4686 (re-search-backward next-re nil t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4687
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4688 ;; Page motions
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4689 ((eq cmd 'scroll-up)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4690 (while (and (pos-visible-in-window-p)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4691 (re-search-forward next-re nil t)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4692 (beginning-of-line 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4693 (recenter 1))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4694 ((eq cmd 'scroll-down)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4695 (while (and (pos-visible-in-window-p)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4696 (re-search-backward next-re nil t)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4697 (recenter (- (window-height) size 2)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4698
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4699 ;; Begin and end of buffer
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4700 ((eq cmd 'beginning-of-buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4701 (goto-char (point-min))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4702 (re-search-forward next-re nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4703 (beginning-of-line 1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4704 ((eq cmd 'end-of-buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4705 (goto-char (point-max))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4706 (re-search-backward next-re nil t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4707
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4708 ;; Exit
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4709 ((eq key ?q)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4710 (throw 'exit nil))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4711 ((eq key ?\C-g)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4712 (if (or (eq last-key ?\C-s) (eq last-key ?\C-r))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4713 (ding)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4714 (bury-buffer)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4715 (error "Abort")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4716 ((or (eq key ?\C-m)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4717 (eq key 'return)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4718 (eq cmd 'newline))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4719 (throw 'exit 'return))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4720 ((memq key event-list)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4721 (throw 'exit key))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4722
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4723 ;; Callback
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4724 ((or (eq key ?C) ; backward compatibility
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4725 (eq key ?f))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4726 (setq cb-flag (not cb-flag)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4727 ((eq key ?\ )
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4728 (if cnt (funcall call-back cnt) (ding)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4729
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4730 ;; Help
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4731 ((eq key ?\?)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4732 (with-output-to-temp-buffer "*RefTeX Help*"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4733 (princ help-string))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4734 (setq win1 (selected-window)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4735 win2 (get-buffer-window "*RefTeX Help*" t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4736 (select-window win2)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4737 (unless (and (pos-visible-in-window-p 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4738 (pos-visible-in-window-p (point-max)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4739 (enlarge-window (1+ (- (count-lines 1 (point-max))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4740 (window-height)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4741 (select-window win1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4742 (setq skip-callback t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4743
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4744 ;; Searching
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4745 ((or (setq forward (eq key ?\C-s)) (eq key ?\C-r))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4746 (if (or (and (not (eq last-key ?\C-s))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4747 (not (eq last-key ?\C-r)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4748 (string= search-str ""))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4749 (setq tmp ; get a new string
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4750 (read-from-minibuffer
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4751 (if (string= search-str "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4752 "Search: "
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4753 (format "Search [%s]:" search-str))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4754 nil mini-map)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4755 search-str (if (string= tmp "")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4756 search-str tmp)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4757 (setq search-start (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4758 (and (not (string= search-str ""))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4759 (progn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4760 (while
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4761 (and (setq matched
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4762 (if forward
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4763 (search-forward search-str nil 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4764 (search-backward search-str nil 1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4765 (or (>= (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4766 (goto-char (match-beginning 0))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4767 (current-column))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4768 (window-width))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4769 (not (or (get-text-property (point) 'cnt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4770 match-everywhere)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4771 (if matched
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4772 (reftex-highlight 2 (match-beginning 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4773 (match-end 0))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4774 (ding)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4775 (goto-char search-start)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4776
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4777 ;; Recursive edit
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4778 ((eq key ?e)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4779 (set-marker reftex-recursive-edit-marker (point))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4780 (unwind-protect
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4781 (progn
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4782 (save-window-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4783 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4784 (other-window 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4785 (message
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4786 (substitute-command-keys
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4787 "Recursive edit. Return to selection with \\[exit-recursive-edit]"))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4788 (recursive-edit)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4789 (unless (equal (marker-buffer
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4790 reftex-recursive-edit-marker)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4791 (current-buffer))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4792 (error "Cannot continue RefTeX from this buffer."))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4793 (goto-char reftex-recursive-edit-marker))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4794 (set-marker reftex-recursive-edit-marker nil)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4795
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4796 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4797 (ding)))))))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4798 (and (get-buffer "*RefTeX Help*") (kill-buffer "*RefTeX Help*"))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4799 (message "")
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4800 (list ev cnt last-cnt)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4801
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4802 ;;; ===========================================================================
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4803 ;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4804 ;;; View cross references
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4805
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4806 (defun reftex-view-crossref (&optional arg)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4807 "View cross reference of \\ref or \\cite macro at point.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4808 If the macro at point is a \\ref, show the corresponding label definition.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4809 If it is a \\cite, show the BibTeX database entry.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4810 If there is no such macro at point, search forward to find one.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4811 When you call this function several times in direct successtion, point will
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4812 move to view subsequent cross references further down in the buffer.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4813 To cope with the plethora of variations in packages, this function
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4814 assumes any macro either starting with ending in `ref' or `cite' to contain
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4815 cross references.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4816 With argument, actually select the window showing the cross reference."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4817
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4818 (interactive "P")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4819
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4820 ;; See where we are.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4821 (let* ((re "\\\\\\([a-z]*\\(cite\\|ref\\)\\|\\(cite\\|ref\\)[a-z]*\\)\\**\\(\\[[^{}]*\\]\\)?{")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4822 (macro (car (car (reftex-what-macro t))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4823 (this-word (reftex-this-word "*a-zA-Z\\\\"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4824 (my-window (selected-window))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4825 pop-window cmd args point)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4826
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4827 (if (and macro
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4828 (string-match "\\`\\\\cite\\|\\`\\\\ref\\|cite\\'\\|ref\\'"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4829 macro))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4830 (and (setq macro (match-string 0 macro))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4831 (string-match "\\`\\\\" macro)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4832 (setq macro (substring macro 1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4833 (setq macro nil))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4834
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4835 (if (and macro (eq last-command this-command))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4836 (if (string= macro "cite")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4837 (progn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4838 (skip-chars-forward "^},%")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4839 (while (and (eq (following-char) ?%)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4840 (or (beginning-of-line 2) t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4841 (skip-chars-forward " \t\n\r")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4842 (skip-chars-forward ",")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4843 (if (eq (following-char) ?})
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4844 (setq macro nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4845 (setq macro nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4846
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4847 (if (and (not macro)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4848 (or (not (string-match "\\`\\\\" this-word))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4849 (eq (following-char) ?\\)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4850 (search-backward "\\" nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4851 t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4852 (if (interactive-p)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4853 ;; Only move far if this function was called directly
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4854 (and (re-search-forward re nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4855 (setq macro (or (match-string 2) (match-string 3))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4856 ;; The macro needs to be at point
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4857 (and (looking-at re)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4858 (setq macro (or (match-string 2) (match-string 3)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4859 (goto-char (match-end 0)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4860
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4861
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4862 (unless macro
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4863 (error "No cross reference to display"))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4864
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4865 ;; Ensure access to scanning info
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4866 (reftex-access-scan-info)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4867
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4868 (cond
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4869 ((string= macro "cite")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4870 (setq cmd 'reftex-pop-to-bibtex-entry
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4871 args (list
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4872 (reftex-this-word "^{},%\n\r")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4873 (reftex-get-bibfile-list) nil t)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4874 ((string= macro "ref")
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4875 (let* ((label (reftex-this-word "^{}%\n\r"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4876 (xr-data (assoc 'xr (symbol-value reftex-docstruct-symbol)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4877 (xr-re (nth 2 xr-data))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4878 (entry (assoc label (symbol-value reftex-docstruct-symbol))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4879 (if (and (not entry) (string-match xr-re label))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4880 ;; Label is defined in external document
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4881 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4882 (save-match-data
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4883 (set-buffer
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4884 (or (reftex-get-file-buffer-force
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4885 (cdr (assoc (match-string 1 label) (nth 1 xr-data))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4886 (error "Problem with external label %s" label))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4887 (setq label (substring label (match-end 1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4888 (reftex-access-scan-info)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4889 (setq entry
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4890 (assoc label (symbol-value reftex-docstruct-symbol)))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4891 (if entry
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4892 (setq cmd 'reftex-pop-to-label
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4893 args (list label (list (nth 3 entry)) nil t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4894 (error "Label %s not known - reparse document might help" label))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4895 (t (error "This should not happen (reftex-view-crossref)")))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4896 (setq point (point))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4897 (apply cmd args)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4898 (setq pop-window (selected-window))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4899 (add-hook 'pre-command-hook 'reftex-highlight-shall-die)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4900 (select-window my-window)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4901 (goto-char point)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4902 (and arg (select-window pop-window))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4903
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4904 (defun reftex-mouse-view-crossref (ev)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4905 "View cross reference of \\ref or \\cite macro where you click.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4906 If the macro at point is a \\ref, show the corresponding label definition.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4907 If it is a \\cite, show the BibTeX database entry.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4908 If there is no such macro at point, search forward to find one.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4909 With argument, actually select the window showing the cross reference."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4910 (interactive "e")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4911 (mouse-set-point ev)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4912 (setq last-command 'self-insert-command) ;; make sure we do not move!
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4913 (reftex-view-crossref current-prefix-arg))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4914
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4915 ;;; ===========================================================================
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4916 ;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4917 ;;; Functions that check out the surroundings
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4918
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4919 (defun reftex-what-macro (which &optional bound)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4920 ;; Find out if point is within the arguments of any TeX-macro.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4921 ;; The return value is either ("\\macro" . (point)) or a list of them.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4922
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4923 ;; If WHICH is nil, immediately return nil.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4924 ;; If WHICH is t, return list of all macros enclosing point.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4925 ;; If WHICH is a list of macros, look only for those macros and return the
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4926 ;; name of the first macro in this list found to enclose point.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4927 ;; If the optional BOUND is an integer, bound backwards directed
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4928 ;; searches to this point. If it is nil, limit to nearest \section -
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4929 ;; like statement.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4930
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4931 ;; This function is pretty stable, but can be fooled if the text contains
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4932 ;; things like \macro{aa}{bb} where \macro is defined to take only one
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4933 ;; argument. As RefTeX cannot know this, the string "bb" would still be
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4934 ;; considered an argument of macro \macro.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4935
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4936 (catch 'exit
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4937 (if (null which) (throw 'exit nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4938 (let ((bound (or bound (save-excursion (re-search-backward
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4939 reftex-section-regexp nil 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4940 (point))))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4941 pos cmd-list cmd cnt cnt-opt entry)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4942 (save-restriction
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4943 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4944 (narrow-to-region (max 1 bound) (point-max))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4945 ;; move back out of the current parenthesis
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4946 (while (condition-case nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4947 (progn (up-list -1) t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4948 (error nil))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4949 (setq cnt 1 cnt-opt 0)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4950 ;; move back over any touching sexps
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4951 (while (and (reftex-move-to-previous-arg bound)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4952 (condition-case nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4953 (progn (backward-sexp) t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4954 (error nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4955 (if (eq (following-char) ?\[) (incf cnt-opt))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4956 (incf cnt))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4957 (setq pos (point))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4958 (when (and (or (= (following-char) ?\[)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4959 (= (following-char) ?\{))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4960 (re-search-backward "\\\\[*a-zA-Z]+\\=" nil t))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4961 (setq cmd (reftex-match-string 0))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4962 (when (looking-at "\\\\begin{[^}]*}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4963 (setq cmd (reftex-match-string 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4964 cnt (1- cnt)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4965 ;; This does ignore optional arguments. Very hard to fix.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4966 (when (setq entry (assoc cmd reftex-env-or-mac-alist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4967 (if (> cnt (or (nth 4 entry) 100))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4968 (setq cmd nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4969 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4970 ((null cmd))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4971 ((eq t which)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4972 (push (cons cmd (point)) cmd-list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4973 ((member cmd which)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
4974 (throw 'exit (cons cmd (point))))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4975 (goto-char pos)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4976 (nreverse cmd-list)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4977
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4978 (defun reftex-what-environment (which &optional bound)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4979 ;; Find out if point is inside a LaTeX environment.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4980 ;; The return value is (e.g.) either ("equation" . (point)) or a list of
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4981 ;; them.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4982
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4983 ;; If WHICH is nil, immediately return nil.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4984 ;; If WHICH is t, return list of all environments enclosing point.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4985 ;; If WHICH is a list of environments, look only for those environments and
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4986 ;; return the name of the first environment in this list found to enclose
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4987 ;; point.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4988
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4989 ;; If the optional BOUND is an integer, bound backwards directed searches to
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
4990 ;; this point. If it is nil, limit to nearest \section - like statement.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4991
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4992 (catch 'exit
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4993 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4994 (if (null which) (throw 'exit nil))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4995 (let ((bound (or bound (save-excursion (re-search-backward
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4996 reftex-section-regexp nil 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4997 (point))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4998 env-list end-list env)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
4999 (while (re-search-backward "\\\\\\(begin\\|end\\){\\([^}]+\\)}"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5000 bound t)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5001 (setq env (buffer-substring-no-properties
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5002 (match-beginning 2) (match-end 2)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5003 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5004 ((string= (match-string 1) "end")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5005 (add-to-list 'end-list env))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5006 ((member env end-list)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5007 (setq end-list (delete env end-list)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5008 ((eq t which)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5009 (push (cons env (point)) env-list))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5010 ((member env which)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5011 (throw 'exit (cons env (point))))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5012 (nreverse env-list)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5013
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5014 (defun reftex-word-before-point ()
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5015 ;; Return the word before point. Word means here:
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5016 ;; Consists of [a-zA-Z0-9.:] and ends at point or whitespace.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5017 (let ((pos (point)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5018 (save-excursion
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5019 (re-search-backward "[^ \t\n\r]" (point-min) 1)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5020 (setq pos (min (1+ (point)) (point-max)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5021 (if (re-search-backward "[^a-zA-Z0-9\\\.:]" (point-min) 1)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5022 (forward-char 1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5023 (buffer-substring-no-properties (point) pos))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5024
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5025 ;; ============================================================================
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5026 ;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5027 ;; Some generally useful functions
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5028
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5029 (defun reftex-no-props (string)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5030 ;; Return STRING with all text properties removed
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5031 (and (stringp string)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5032 (set-text-properties 0 (length string) nil string))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5033 string)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5034
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5035 (defun reftex-match-string (n)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5036 ;; Match string without properties
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5037 (when (match-beginning n)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5038 (buffer-substring-no-properties (match-beginning n) (match-end n))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5039
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5040 (defun reftex-this-word (&optional class)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5041 ;; Grab the word around point.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5042 (setq class (or class "-a-zA-Z0-9:_/.*;|"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5043 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5044 (buffer-substring-no-properties
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5045 (progn (skip-chars-backward class) (point))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5046 (progn (skip-chars-forward class) (point)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5047
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5048 (defvar enable-multibyte-characters)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5049 (defun reftex-truncate (string ncols &optional ellipses padding)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5050 ;; Truncate a string to NCHAR characters.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5051 ;; Works fast with ASCII and correctly with Mule characters.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5052 ;; When ELLIPSES is non-nil, put three dots at the end of the string.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5053 (setq string
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5054 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5055 ((and (boundp 'enable-multibyte-characters)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5056 enable-multibyte-characters)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5057 (if (<= (string-width string) ncols)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5058 string
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5059 (if ellipses
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5060 (concat (truncate-string-to-width string (- ncols 3)) "...")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5061 (truncate-string-to-width string ncols))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5062 (t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5063 (if (<= (length string) ncols)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5064 string
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5065 (if ellipses
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5066 (concat (substring string 0 (- ncols 3)) "...")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5067 (substring string 0 ncols))))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5068 (if padding
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5069 (format (format "%%-%ds" ncols) string)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5070 string))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5071
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5072 (defun reftex-nearest-match (regexp &optional pos)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5073 ;; Find the nearest match of REGEXP. Set the match data.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5074 ;; If POS is given, calculate distances relative to it.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5075 ;; Return nil if there is no match.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5076 (let ((start (point)) (pos (or pos (point))) match1 match2 match)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5077 (goto-char start)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5078 (when (re-search-backward regexp nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5079 (setq match1 (match-data)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5080 (goto-char start)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5081 (when (re-search-forward regexp nil t)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5082 (setq match2 (match-data)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5083 (goto-char start)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5084 (setq match
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5085 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5086 ((not match1) match2)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5087 ((not match2) match1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5088 ((< (abs (- pos (car match1))) (abs (- pos (car match2)))) match1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5089 (t match2)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5090 (if match (progn (store-match-data match) t) nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5091
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5092 (defun reftex-auto-mode-alist ()
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5093 ;; Return an `auto-mode-alist' with only the .gz (etc) thingies.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5094 ;; Stolen from gnus nnheader.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5095 (let ((alist auto-mode-alist)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5096 out)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5097 (while alist
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5098 (when (listp (cdr (car alist)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5099 (push (car alist) out))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5100 (pop alist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5101 (nreverse out)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5102
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5103 (defun reftex-access-search-path (which &optional recurse file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5104 ;; Access path from environment variables. WHICH is either "tex" or "bib".
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5105 ;; When RECURSE is t, expand recursive paths, ending in double slash
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5106 ;; FILE is just for the message.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5107 (let* ((pathvar (intern (concat "reftex-" which "-path")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5108 (status (get pathvar 'status)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5109 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5110 ((eq status 'recursed))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5111 ((and status (null recurse)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5112 ((null status)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5113 (let ((env-vars (if (equal which "tex") (list "TEXINPUTS")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5114 reftex-bibpath-environment-variables)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5115 (set pathvar (reftex-parse-colon-path
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5116 (mapconcat '(lambda(x) (or (getenv x) ""))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5117 env-vars path-separator))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5118 (put pathvar 'status 'split))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5119 ((and (eq 'split status) recurse)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5120 (message "Expanding search path to find %s file: %s ..." which file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5121 (set pathvar (reftex-expand-path (symbol-value pathvar)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5122 (put pathvar 'status 'recursed)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5123
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5124 (defun reftex-find-file-on-path (file path)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5125 ;; Find FILE along the directory list PATH.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5126 (catch 'exit
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5127 (when (file-name-absolute-p file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5128 (if (file-exists-p file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5129 (throw 'exit file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5130 (throw 'exit nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5131 (let* ((thepath path) file1 dir
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5132 (doubleslash (concat "/" "/")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5133 (while (setq dir (pop thepath))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5134 (when (string= (substring dir -2) doubleslash)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5135 (setq dir (substring dir 0 -1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5136 (setq file1 (expand-file-name file dir))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5137 (if (file-exists-p file1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5138 (throw 'exit file1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5139 ;; No such file
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5140 nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5141
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5142 (defun reftex-parse-colon-path (path)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5143 ;; Like parse-colon-parse, but // or /~ have no effects.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5144 (mapcar 'file-name-as-directory
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5145 (delete "" (split-string path (concat path-separator "+")))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5146
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5147 (defun reftex-expand-path (path)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5148 ;; Expand parts of path ending in a double slash
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5149 (let (path1 dir dirs (doubleslash (concat "/" "/")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5150 (while (setq dir (pop path))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5151 (if (string= (substring dir -2) doubleslash)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5152 (progn
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5153 (setq dir (substring dir 0 -1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5154 (setq dirs (reftex-recursive-directory-list dir))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5155 (setq path1 (append dirs path1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5156 (push dir path1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5157 (nreverse path1)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5158
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5159 (defun reftex-recursive-directory-list (dir)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5160 (let ((path (list dir)) dirs path1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5161 (while (setq dir (pop path))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5162 (setq dirs
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5163 (delete nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5164 (mapcar (function
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5165 (lambda (x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5166 (if (and (file-directory-p x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5167 (not (string-match "/\\.+\\'" x)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5168 (file-name-as-directory x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5169 nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5170 (directory-files dir t))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5171 (setq path (append dirs path))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5172 (push dir path1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5173 path1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5174
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5175 (defun reftex-make-regexp-allow-for-ctrl-m (string)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5176 ;; convert STRING into a regexp, allowing ^M for \n and vice versa
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5177 (let ((start -2))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5178 (setq string (regexp-quote string))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5179 (while (setq start (string-match "[\n\r]" string (+ 3 start)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5180 (setq string (replace-match "[\n\r]" nil t string)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5181 string))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5182
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5183 (defun reftex-make-desparate-section-regexp (old)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5184 ;; Return a regexp which will still match a section statement even if
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5185 ;; x-symbol or isotex or the like have been at work in the mean time.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5186 (let* ((n (1+ (string-match "[[{]" old)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5187 (new (regexp-quote (substring old 0 (1+ (string-match "[[{]" old)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5188 (old (substring old n)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5189 (while (string-match
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5190 "\\([\r\n]\\)\\|\\(\\`\\|[ \t\n\r]\\)\\([a-zA-Z0-9]+\\)\\([ \t\n\r]\\|}\\'\\)"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5191 old)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5192 (if (match-beginning 1)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5193 (setq new (concat new "[^\n\r]*[\n\r]"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5194 (setq new (concat new "[^\n\r]*" (match-string 3 old))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5195 (setq old (substring old (match-end 0))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5196 new))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5197
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5198 (defun reftex-delete-list (elt-list list)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5199 ;; like delete, but with a list of things to delete
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5200 ;; (original code from Rory Molinari)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5201 (while elt-list
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5202 (setq list (delete (car elt-list) list)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5203 elt-list (cdr elt-list)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5204 list)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5205
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5206 (defun reftex-get-buffer-visiting (file)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5207 ;; return a buffer visiting FILE
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5208 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5209 ((boundp 'find-file-compare-truenames) ; XEmacs
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5210 (let ((find-file-compare-truenames t))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5211 (get-file-buffer file)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5212 ((fboundp 'find-buffer-visiting) ; Emacs
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5213 (find-buffer-visiting file))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5214 (t (error "Please report this problem to dominik@strw.leidenuniv.nl"))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5215
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5216 (defun reftex-get-file-buffer-force (file &optional mark-to-kill)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5217 ;; Return a buffer visiting file. Make one, if necessary.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5218 ;; If neither such a buffer nor the file exist, return nil.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5219 ;; If MARK-TO-KILL is t and there is no live buffer, load the file with
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5220 ;; initializations according to `reftex-initialize-temporary-buffers',
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5221 ;; and mark the buffer to be killed after use.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5222
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5223 (let ((buf (reftex-get-buffer-visiting file)))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5224
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5225 (cond (buf
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5226 ;; We have it already as a buffer - just return it
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5227 buf)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5228
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5229 ((file-readable-p file)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5230 ;; At least there is such a file and we can read it.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5231
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5232 (if (or (not mark-to-kill)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5233 (eq t reftex-initialize-temporary-buffers))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5234
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5235 ;; Visit the file with full magic
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5236 (setq buf (find-file-noselect file))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5237
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5238 ;; Else: Visit the file just briefly, without or
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5239 ;; with limited Magic
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5240
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5241 ;; The magic goes away
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5242 (let ((format-alist nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5243 (auto-mode-alist (reftex-auto-mode-alist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5244 (default-major-mode 'fundamental-mode)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5245 (after-insert-file-functions nil))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5246 (setq buf (find-file-noselect file)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5247
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5248 ;; Is there a hook to run?
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5249 (when (listp reftex-initialize-temporary-buffers)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5250 (save-excursion
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5251 (set-buffer buf)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5252 (run-hooks 'reftex-initialize-temporary-buffers))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5253
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5254 ;; Lets see if we got a license to kill :-|
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5255 (and mark-to-kill
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5256 (add-to-list 'reftex-buffers-to-kill buf))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5257
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5258 ;; Return the new buffer
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5259 buf)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5260
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5261 ;; If no such file exists, return nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5262 (t nil))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5263
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5264 (defun reftex-splice-symbols-into-list (list alist)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5265 ;; Splice the association in ALIST of any symbols in LIST into the list.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5266 ;; Return new list.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5267 (let (rtn tmp)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5268 (while list
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5269 (while (and (not (null (car list))) ;; keep list elements nil
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5270 (symbolp (car list)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5271 (setq tmp (car list))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5272 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5273 ((assoc tmp alist)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5274 (setq list (append (nth 2 (assoc tmp alist)) (cdr list))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5275 (t
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5276 (error "Cannot treat symbol %s in reftex-label-alist"
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5277 (symbol-name tmp)))))
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5278 (push (pop list) rtn))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5279 (nreverse rtn)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5280
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5281 (defun reftex-uniquify (alist &optional keep-list)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5282 ;; Return a list of all elements in ALIST, but each car only once.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5283 ;; Elements of KEEP-LIST are not removed even if duplicate.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5284 (let (new elm)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5285 (while alist
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5286 (setq elm (pop alist))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5287 (if (or (member (car elm) keep-list)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5288 (not (assoc (car elm) new)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5289 (push elm new)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5290 (nreverse new)))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5291
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5292 (defun reftex-use-fonts ()
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5293 ;; Return t if we can and want to use fonts.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5294 (and window-system
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5295 reftex-use-fonts
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5296 (featurep 'font-lock)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5297
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5298 (defun reftex-refontify ()
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5299 ;; Return t if we need to refontify context
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5300 (and (reftex-use-fonts)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5301 (or (eq t reftex-refontify-context)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5302 (and (eq 1 reftex-refontify-context)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5303 (or (featurep 'x-symbol))))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5304
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5305 ;; Highlighting uses overlays. If this is for XEmacs, we need to load
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5306 ;; the overlay library, available in version 19.15
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5307 (and (not (fboundp 'make-overlay))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5308 (condition-case nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5309 (require 'overlay)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5310 (error
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5311 (error "RefTeX needs overlay emulation (available in XEmacs 19.15)"))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5312
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5313 ;; We keep a vector with several different overlays to do our highlighting.
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5314 (defvar reftex-highlight-overlays [nil nil nil])
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5315
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5316 ;; Initialize the overlays
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5317 (aset reftex-highlight-overlays 0 (make-overlay 1 1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5318 (overlay-put (aref reftex-highlight-overlays 0) 'face 'highlight)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5319 (aset reftex-highlight-overlays 1 (make-overlay 1 1))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5320 (overlay-put (aref reftex-highlight-overlays 1) 'face 'highlight)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5321 (aset reftex-highlight-overlays 2 (make-overlay 1 1))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5322 (overlay-put (aref reftex-highlight-overlays 2) 'face
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5323 (if (string-match "XEmacs" emacs-version) 'zmacs-region 'region))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5324
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5325 ;; Two functions for activating and deactivation highlight overlays
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5326 (defun reftex-highlight (index begin end &optional buffer)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5327 "Highlight a region with overlay INDEX."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5328 (move-overlay (aref reftex-highlight-overlays index)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5329 begin end (or buffer (current-buffer))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5330 (defun reftex-unhighlight (index)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5331 "Detatch overlay INDEX."
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5332 (delete-overlay (aref reftex-highlight-overlays index)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5333
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5334 (defun reftex-highlight-shall-die ()
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5335 ;; Function used in pre-command-hook to remove highlights.
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5336 (remove-hook 'pre-command-hook 'reftex-highlight-shall-die)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5337 (reftex-unhighlight 0))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5338
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5339 ;;; ---------------------------------------------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5340 ;;;
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5341 ;;; Functions to compile the tables, reset the mode etc.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5342
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5343 (defun reftex-reset-mode ()
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5344 "Reset RefTeX Mode. Required to implement changes to some list variables.
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5345 This function will compile the information in `reftex-label-alist' and similar
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5346 variables. It is called when RefTeX is first used, and after changes to
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5347 these variables."
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5348 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5349
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5350 ;; Record that we have done this
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5351 (setq reftex-tables-dirty nil)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5352 (setq reftex-memory
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5353 (list reftex-label-alist reftex-label-alist-external-add-ons
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5354 reftex-default-label-alist-entries))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5355
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5356 ;; Reset the file search path variables
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5357 (put 'reftex-tex-path 'status nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5358 (put 'reftex-bib-path 'status nil)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5359
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5360 ;; Kill temporary buffers associated with RefTeX - just in case they
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5361 ;; were not cleaned up properly
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5362 (let ((buffer-list '("*RefTeX Master*" "*RefTeX Help*" "*RefTeX Select*"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5363 "*Duplicate Labels*" "*toc*" "*RefTeX-scratch*"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5364 buf)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5365 (while (setq buf (pop buffer-list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5366 (if (get-buffer buf)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5367 (kill-buffer buf))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5368
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5369 ;; Make sure the current document will be rescanned soon.
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5370 (reftex-reset-scanning-information)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5371
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5372 ;; Plug functions into AUCTeX if the user option says so.
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5373 (reftex-plug-into-AUCTeX)
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5374
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5375 (message "updating internal tables...")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5376 (reftex-compute-ref-cite-tables)
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5377 (message "updating internal tables... done"))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5378
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5379 (defun reftex-reset-scanning-information ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5380 "Reset the symbols containing information from buffer scanning.
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5381 This enforces rescanning the buffer on next use."
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5382 (if (string= reftex-last-toc-master (reftex-TeX-master-file))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5383 (reftex-empty-toc-buffer))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5384 (let ((symlist reftex-multifile-symbols)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5385 symbol)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5386 (while symlist
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5387 (setq symbol (car symlist)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5388 symlist (cdr symlist))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5389 (if (and (symbolp (symbol-value symbol))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5390 (not (null (symbol-value symbol))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5391 (set (symbol-value symbol) nil)))))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5392
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5393 (defun reftex-compute-ref-cite-tables ()
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5394 ;; Update ref and cite tables
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5395
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5396 (interactive)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5397
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5398 ;; Compile information in reftex-label-alist
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5399 (let ((tmp (reftex-uniquify (reftex-splice-symbols-into-list
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5400 (append
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5401 reftex-label-alist
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5402 reftex-label-alist-external-add-ons
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5403 reftex-default-label-alist-entries)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5404 reftex-label-alist-builtin)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5405 '(nil)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5406 entry env-or-mac typekeychar typekey prefix context word
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5407 fmt reffmt labelfmt wordlist qh-list macros-with-labels
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5408 nargs nlabel opt-args cell sum)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5409
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5410 (setq reftex-words-to-typekey-alist nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5411 reftex-typekey-list nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5412 reftex-typekey-to-format-alist nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5413 reftex-typekey-to-prefix-alist nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5414 reftex-env-or-mac-alist nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5415 reftex-label-env-list nil
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5416 reftex-label-mac-list nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5417 (while tmp
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5418 (catch 'next-entry
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5419 (setq entry (car tmp)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5420 env-or-mac (car entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5421 entry (cdr entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5422 tmp (cdr tmp))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5423 (if (null env-or-mac)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5424 (setq env-or-mac ""))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5425 (if (stringp (car entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5426 ;; This is before version 2.00 - convert entry to new format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5427 ;; This is just to keep old users happy
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5428 (setq entry (cons (string-to-char (car entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5429 (cons (concat (car entry) ":")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5430 (cdr entry)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5431 (setq typekeychar (nth 0 entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5432 typekey (char-to-string typekeychar)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5433 prefix (nth 1 entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5434 fmt (nth 2 entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5435 context (nth 3 entry)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5436 wordlist (nth 4 entry))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5437 (if (stringp wordlist)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5438 ;; This is before version 2.04 - convert to new format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5439 (setq wordlist (nthcdr 4 entry)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5440
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5441 (if (and (stringp fmt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5442 (string-match "@" fmt))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5443 ;; special syntax for specifying a label format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5444 (setq fmt (split-string fmt "@+"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5445 (setq fmt (list "\\label{%s}" fmt)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5446 (setq labelfmt (car fmt)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5447 reffmt (nth 1 fmt))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5448 (if typekey
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5449 (add-to-list 'reftex-typekey-list typekey))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5450 (if (and typekey prefix
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5451 (not (assoc typekey reftex-typekey-to-prefix-alist)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5452 (add-to-list 'reftex-typekey-to-prefix-alist
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5453 (cons typekey prefix)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5454 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5455 ((string-match "\\`\\\\" env-or-mac)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5456 ;; It's a macro
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5457 (let ((result (reftex-parse-args env-or-mac)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5458 (setq env-or-mac (or (first result) env-or-mac)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5459 nargs (second result)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5460 nlabel (third result)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5461 opt-args (fourth result))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5462 (if nlabel (add-to-list 'macros-with-labels env-or-mac)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5463 (add-to-list 'reftex-label-mac-list env-or-mac))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5464 (t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5465 (setq nargs nil nlabel nil opt-args nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5466 (cond ((string= env-or-mac "any"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5467 ((string= env-or-mac ""))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5468 ((string= env-or-mac "section"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5469 (t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5470 (add-to-list 'reftex-label-env-list env-or-mac)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5471 ;; Translate some special context cases
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5472 (when (assq context reftex-default-context-regexps)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5473 (setq context
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5474 (format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5475 (cdr (assq context reftex-default-context-regexps))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5476 (regexp-quote env-or-mac))))))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5477 (and reffmt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5478 (not (assoc typekey reftex-typekey-to-format-alist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5479 (push (cons typekey reffmt) reftex-typekey-to-format-alist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5480 (and (not (string= env-or-mac "any"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5481 (not (string= env-or-mac ""))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5482 (not (assoc env-or-mac reftex-env-or-mac-alist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5483 (push (list env-or-mac typekey context labelfmt
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5484 nargs nlabel opt-args)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5485 reftex-env-or-mac-alist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5486 (while (and (setq word (pop wordlist))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5487 (stringp word))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5488 (setq word (downcase word))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5489 (or (assoc word reftex-words-to-typekey-alist)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5490 (push (cons word typekey) reftex-words-to-typekey-alist)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5491 (cond
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5492 ((string= "" env-or-mac) nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5493 ((setq cell (assoc typekey qh-list))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5494 (push env-or-mac (cdr cell)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5495 (t
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5496 (push (list typekey env-or-mac) qh-list)))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5497
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5498 (setq qh-list (sort qh-list '(lambda (x1 x2) (string< (car x1) (car x2)))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5499 (setq reftex-typekey-to-prefix-alist
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5500 (nreverse reftex-typekey-to-prefix-alist))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5501 (setq reftex-type-query-prompt
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5502 (concat "Label type: "
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5503 (mapconcat '(lambda(x)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5504 (format "[%s]" (car x)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5505 qh-list " ")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5506 " (?=Help)"))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5507 (setq reftex-type-query-help
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5508 (concat "SELECT A LABEL TYPE:\n--------------------\n"
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5509 (mapconcat
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5510 '(lambda(x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5511 (setq sum 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5512 (format " [%s] %s"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5513 (car x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5514 (mapconcat
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5515 '(lambda(x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5516 (setq sum (+ sum (length x)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5517 (if (< sum 60)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5518 x
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5519 (setq sum 0)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5520 (concat "\n " x)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5521 (cdr x) " ")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5522 qh-list "\n")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5523
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5524 ;; Calculate the regular expressions
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5525 (let ((label-re "\\\\label{\\([^}]*\\)}")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5526 (include-re "\\(\\`\\|[\n\r]\\)[ \t]*\\\\\\(include\\|input\\)[{ \t]+\\([^} \t\n\r]+\\)")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5527 (section-re
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5528 (concat "\\(\\`\\|[\n\r]\\)[ \t]*\\\\\\("
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5529 (mapconcat 'car reftex-section-levels "\\|")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5530 "\\)\\*?\\(\\[[^]]*\\]\\)?{"))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5531 (macro-re
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5532 (if macros-with-labels
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5533 (concat "\\("
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5534 (mapconcat 'regexp-quote macros-with-labels "\\|")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5535 "\\)[[{]")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5536 ""))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5537 (find-label-re-format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5538 (concat "\\("
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5539 (mapconcat 'regexp-quote (append '("\\label")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5540 macros-with-labels) "\\|")
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5541 "\\)\\([[{][^]}]*[]}]\\)*[[{]\\(%s\\)[]}]")))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5542 (setq reftex-section-regexp section-re
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5543 reftex-section-or-include-regexp
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5544 (concat section-re "\\|" include-re)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5545 reftex-everything-regexp
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5546 (concat label-re "\\|" section-re "\\|" include-re
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5547 (if macros-with-labels "\\|" "") macro-re)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5548 reftex-find-label-regexp-format find-label-re-format
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5549 reftex-find-label-regexp-format2
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5550 "\\([]} \t\n\r]\\)\\([[{]\\)\\(%s\\)[]}]"))))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5551
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5552 ;;; Keybindings --------------------------------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5553
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5554 (define-key reftex-mode-map "\C-c=" 'reftex-toc)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5555 (define-key reftex-mode-map "\C-c(" 'reftex-label)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5556 (define-key reftex-mode-map "\C-c)" 'reftex-reference)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5557 (define-key reftex-mode-map "\C-c[" 'reftex-citation)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5558 (define-key reftex-mode-map "\C-c&" 'reftex-view-crossref)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5559
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5560 ;; If the user requests so, she can have a few more bindings:
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5561 (cond
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5562 (reftex-extra-bindings
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5563 (define-key reftex-mode-map "\C-ct" 'reftex-toc)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5564 (define-key reftex-mode-map "\C-cl" 'reftex-label)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5565 (define-key reftex-mode-map "\C-cr" 'reftex-reference)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5566 (define-key reftex-mode-map "\C-cc" 'reftex-citation)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5567 (define-key reftex-mode-map "\C-cv" 'reftex-view-crossref)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5568 (define-key reftex-mode-map "\C-cg" 'reftex-grep-document)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5569 (define-key reftex-mode-map "\C-cs" 'reftex-search-document)))
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5570
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5571 ;;; Menus --------------------------------------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5572
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5573 ;; Define a menu for the menu bar if Emacs is running under X
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5574
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5575 (require 'easymenu)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5576
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5577 (easy-menu-define
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5578 reftex-mode-menu reftex-mode-map
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5579 "Menu used in RefTeX mode"
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5580 `("Ref"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5581 ["Table of Contents" reftex-toc t]
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5582 "----"
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5583 ["\\label" reftex-label t]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5584 ["\\ref" reftex-reference t]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5585 ["\\cite" reftex-citation t]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5586 ["View Crossref" reftex-view-crossref t]
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5587 "----"
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5588 ("Parse Document"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5589 ["Only this File" reftex-parse-one t]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5590 ["Entire Document" reftex-parse-all (reftex-is-multi)]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5591 ["Save to File" (reftex-access-parse-file 'write)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5592 (> (length (symbol-value reftex-docstruct-symbol)) 0)]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5593 ["Restore from File" (reftex-access-parse-file 'restore)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5594 (reftex-access-parse-file 'readable)]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5595 "----"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5596 ["Enable Partial Scans"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5597 (setq reftex-enable-partial-scans (not reftex-enable-partial-scans))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5598 :style toggle :selected reftex-enable-partial-scans]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5599 ["Auto-Save Parse Info"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5600 (setq reftex-save-parse-info (not reftex-save-parse-info))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5601 :style toggle :selected reftex-save-parse-info]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5602 "---"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5603 ["Reset RefTeX Mode" reftex-reset-mode t])
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5604 ("Multifile"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5605 ["Search Whole Document" reftex-search-document t]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5606 ["Replace in Document" reftex-query-replace-document t]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5607 ["Grep on Document" reftex-grep-document t]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5608 "----"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5609 ["Create TAGS File" reftex-create-tags-file t]
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5610 "----"
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5611 ["Find Duplicate Labels" reftex-find-duplicate-labels t]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5612 ["Change Label and Refs" reftex-change-label t])
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5613 ("Citation Options"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5614 "Citation Style"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5615 ,@(mapcar
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5616 (function
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5617 (lambda (x)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5618 (vector
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5619 (symbol-name (car x))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5620 (list 'setq 'reftex-cite-format (list 'quote (car x)))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5621 :style 'radio :selected
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5622 (list 'eq 'reftex-cite-format (list 'quote (car x))))))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5623 reftex-cite-format-builtin)
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5624 "----"
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5625 "Bibinfo in Comments"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5626 ["Attach Comments"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5627 (setq reftex-comment-citations (not reftex-comment-citations))
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5628 :style toggle :selected reftex-comment-citations]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5629 "---"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5630 "Sort Database Matches"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5631 ["by Author" (setq reftex-sort-bibtex-matches 'author)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5632 :style radio :selected (eq reftex-sort-bibtex-matches 'author)]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5633 ["by Year" (setq reftex-sort-bibtex-matches 'year)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5634 :style radio :selected (eq reftex-sort-bibtex-matches 'year)]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5635 ["by Year, reversed" (setq reftex-sort-bibtex-matches 'reverse-year)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5636 :style radio :selected (eq reftex-sort-bibtex-matches 'reverse-year)]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5637 ["Not" (setq reftex-sort-bibtex-matches nil)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5638 :style radio :selected (eq reftex-sort-bibtex-matches nil)])
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5639 "----"
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5640 ["Customize RefTeX" reftex-customize t]
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5641 "----"
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5642 ["Show Documentation" reftex-show-commentary t]))
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5643
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5644 ;;; Run Hook ------------------------------------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5645
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5646 (run-hooks 'reftex-load-hook)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5647
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5648 ;;; That's it! ----------------------------------------------------------------
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5649
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5650 (provide 'reftex)
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5651
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5652 ; Make sure tabels are compiled
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5653 (message "updating internal tables...")
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5654 (reftex-compute-ref-cite-tables)
165
5a88923fcbfe Import from CVS: tag r20-3b9
cvs
parents: 155
diff changeset
5655 (message "updating internal tables...done")
155
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5656 (setq reftex-tables-dirty nil)
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5657
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5658 ;;;============================================================================
43dd3413c7c7 Import from CVS: tag r20-3b4
cvs
parents:
diff changeset
5659
207
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5660 ;;; reftex.el ends here
e45d5e7c476e Import from CVS: tag r20-4b2
cvs
parents: 195
diff changeset
5661