reftex-1   [plain text]


This is ../info/reftex, produced by makeinfo version 4.0 from
reftex.texi.

INFO-DIR-SECTION Emacs
START-INFO-DIR-ENTRY
* RefTeX: (reftex).	Emacs support for LaTeX cross-references and citations.
END-INFO-DIR-ENTRY

   This file documents RefTeX, a package to do labels, references,
citations and indices for LaTeX documents with Emacs.

   This is edition 4.16 of the RefTeX User Manual for RefTeX 4.16

   Copyright (c) 1997, 1998, 1999, 2000 2001 Free Software Foundation,
Inc.

   Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover texts being "A GNU Manual",
and with the Back-Cover Texts as in (a) below.  A copy of the license
is included in the section entitled "GNU Free Documentation License" in
the Emacs manual.

   (a) The FSF's Back-Cover Text is: "You have freedom to copy and
modify this GNU Manual, like GNU software.  Copies published by the Free
Software Foundation raise funds for GNU development."

   This document is part of a collection distributed under the GNU Free
Documentation License.  If you want to distribute this document
separately from the collection, you can do so by adding a copy of the
license to the document, as described in section 6 of the license.


File: reftex,  Node: Top,  Up: (dir)

   RefTeX is a package for managing Labels, References, Citations and
index entries with GNU Emacs.

   Don't be discouraged by the size of this manual, which covers RefTeX
in great depth.  All you need to know to use RefTeX can be summarized
on two pages (*note RefTeX in a Nutshell::).  You can go back later to
other parts of this document when needed.

* Menu:

* Introduction::                     Quick-Start information.

* Table of Contents::                A Tool to move around quickly.
* Labels and References::            Creating and referencing labels.
* Citations::                        Creating Citations.
* Index Support::                    Creating and Checking Index Entries.
* Viewing Cross-References::         Who references or cites what?

* RefTeXs Menu::                     The Ref menu in the menubar.
* Key Bindings::                      The default key bindings.
* Faces::                            Fontification of RefTeX's buffers.
* Multifile Documents::              Document spread over many files.
* Language Support::                 How to support other languages.
* Finding Files::                    Included TeX files and BibTeX .bib files.
* AUCTeX::                           Cooperation with AUCTeX.
* Optimizations::                    When RefTeX is too slow.
* Problems and Work-Arounds::        First Aid.
* Imprint::                          Author, Web-site, Thanks

* Commands::                         Which are the available commands.
* Options::                          How to extend and configure RefTeX.
* Keymaps and Hooks::                For customization.
* Changes::                          A List of recent changes to RefTeX.

The Index

* Index::                            The full index.


Introduction

* Installation::                     How to install and activate RefTeX.
* RefTeX in a Nutshell::             A brief summary and quick guide.

Labels and References

* Creating Labels::
* Referencing Labels::
* Builtin Label Environments::       The environments RefTeX knows about.
* Defining Label Environments::        ... and environments it doesn't.
* Reference Info::                   View the label corresponding to a \ref.
* xr (LaTeX package)::               References to external documents.
* varioref (LaTeX package)::         How to create \vref instead of \ref.
* fancyref (LaTeX package)::         How to create \fref instead of \ref.

Defining Label Environments

* Theorem and Axiom::                Defined with `\newenvironment'.
* Quick Equation::                   When a macro sets the label type.
* Figure Wrapper::                   When a macro argument is a label.
* Adding Magic Words::               Other words for other languages.
* Using \eqref::                     How to switch to this AMS-LaTeX macro.
* Non-Standard Environments::        Environments without \begin and \end
* Putting it Together::              How to combine many entries.

Citations

* Creating Citations::               How to create them.
* Citation Styles::                  Natbib, Harvard, Chicago and Co.
* Citation Info::                    View the corresponding database entry.
* Chapterbib and Bibunits::          Multiple bibliographies in a Document.
* Citations Outside LaTeX::          How to make citations in Emails etc.

Index Support

* Creating Index Entries::           Macros and completion of entries.
* The Index Phrases File::           A special file for global indexing.
* Displaying and Editing the Index:: The index editor.
* Builtin Index Macros::             The index macros RefTeX knows about.
* Defining Index Macros::                ... and macros it  doesn't.

The Index Phrases File

* Collecting Phrases::               Collecting from document or external.
* Consistency Checks::               Check for duplicates etc.
* Global Indexing::                  The interactive indexing process.

AUCTeX

* AUCTeX-RefTeX Interface::          How both packages work together
* Style Files::                      AUCTeX's style files can support RefTeX
* Bib-Cite::                         Hypertext reading of a document

Options, Keymaps, Hooks

* Options (Table of Contents)::
* Options (Defining Label Environments)::
* Options (Creating Labels)::
* Options (Referencing Labels)::
* Options (Creating Citations)::
* Options (Index Support)::
* Options (Viewing Cross-References)::
* Options (Finding Files)::
* Options (Optimizations)::
* Options (Fontification)::
* Options (Misc)::


File: reftex,  Node: Introduction,  Next: Table of Contents,  Up: Top

Introduction
************

   RefTeX is a specialized package for support of labels, references,
citations, and the index in LaTeX.  RefTeX wraps itself round 4 LaTeX
macros: `\label', `\ref', `\cite', and `\index'.  Using these macros
usually requires looking up different parts of the document and
searching through BibTeX database files.  RefTeX automates these
time-consuming tasks almost entirely.  It also provides functions to
display the structure of a document and to move around in this
structure quickly.

   *Note Imprint::, for information about who to contact for help, bug
reports or suggestions.

* Menu:

* Installation::                     How to install and activate RefTeX.
* RefTeX in a Nutshell::             A brief summary and quick guide.


File: reftex,  Node: Installation,  Next: RefTeX in a Nutshell,  Up: Introduction

Installation
============

   RefTeX is bundled and pre-installed with Emacs since version 20.2.
It was also bundled and pre-installed with XEmacs 19.16-20.x.  XEmacs
21.x users want to install the corresponding plug-in package which is
available from the XEmacs ftp site
(ftp://ftp.xemacs.org/pub/xemacs/packages/).  See the XEmacs 21.x
documentation on package installation for details.

   Users of earlier Emacs distributions (including Emacs 19) can get a
copy of the RefTeX distribution from the maintainers web-page.  *Note
Imprint::, for more information.

Environment
===========

   RefTeX needs to access all files which are part of a multifile
document, and the BibTeX database files requested by the
`\bibliography' command.  To find these files, RefTeX will require a
search path, i.e. a list of directories to check.  Normally this list
is stored in the environment variables `TEXINPUTS' and `BIBINPUTS'
which are also used by RefTeX.  However, on some systems these
variables do not contain the full search path.  If RefTeX does not work
for you because it cannot find some files, read *Note Finding Files::.

Entering RefTeX Mode
====================

   To turn RefTeX Mode on and off in a particular buffer, use `M-x
reftex-mode'.  To turn on RefTeX Mode for all LaTeX files, add the
following lines to your `.emacs' file:

     (add-hook 'LaTeX-mode-hook 'turn-on-reftex)   ; with AUCTeX LaTeX mode
     (add-hook 'latex-mode-hook 'turn-on-reftex)   ; with Emacs latex mode


File: reftex,  Node: RefTeX in a Nutshell,  Prev: Installation,  Up: Introduction

RefTeX in a Nutshell
====================

  1. Table of Contents
     Typing `C-c =' (`reftex-toc') will show a table of contents of the
     document.  This buffer can display sections, labels and index
     entries defined in the document.  From the buffer, you can jump
     quickly to every part of your document.  Press `?' to get help.

  2. Labels and References
     RefTeX helps to create unique labels and to find the correct key
     for references quickly.  It distinguishes labels for different
     environments, knows about all standard environments (and many
     others), and can be configured to recognize any additional labeled
     environments you have defined yourself (variable
     `reftex-label-alist').

        * Creating Labels
          Type `C-c (' (`reftex-label') to insert a label at point.
          RefTeX will either
             - derive a label from context (default for section labels)

             - prompt for a label string (default for figures and
               tables) or

             - insert a simple label made of a prefix and a number (all
               other environments)

          Which labels are created how is configurable with the variable
          `reftex-insert-label-flags'.

        * Referencing Labels
          To make a reference, type `C-c )' (`reftex-reference').  This
          shows an outline of the document with all labels of a certain
          type (figure, equation,...) and some label context.
          Selecting a label inserts a `\ref{LABEL}' macro into the
          original buffer.

  3. Citations
     Typing `C-c [' (`reftex-citation') will let you specify a regular
     expression to search in current BibTeX database files (as
     specified in the `\bibliography' command) and pull out a list of
     matches for you to choose from.  The list is _formatted_ and
     sorted.  The selected article is referenced as `\cite{KEY}' (see
     the variable `reftex-cite-format' if you want to insert different
     macros).

  4. Index Support
     RefTeX helps to enter index entries.  It also compiles all entries
     into an alphabetically sorted `*Index*' buffer which you can use
     to check and edit the entries.  RefTeX knows about the standard
     index macros and can be configured to recognize any additional
     macros you have defined (`reftex-index-macros').  Multiple indices
     are supported.

        * Creating Index Entries
          To index the current selection or the word at point, type
          `C-c /' (`reftex-index-selection-or-word').  The default macro
          `reftex-index-default-macro' will be used.  For a more
          complex entry type `C-c <' (`reftex-index'), select any of
          the index macros and enter the arguments with completion.

        * The Index Phrases File (Delayed Indexing)
          Type `C-c \' (`reftex-index-phrase-selection-or-word') to add
          the current word or selection to a special _index phrase
          file_.  RefTeX can later search the document for occurrences
          of these phrases and let you interactively index the matches.

        * Displaying and Editing the Index
          To display the compiled index in a special buffer, type `C-c
          >' (`reftex-display-index').  From that buffer you can check
          and edit all entries.

  5. Viewing Cross-References
     When point is on the KEY argument of a cross-referencing macro
     (`\label', `\ref', `\cite', `\bibitem', `\index', and variations)
     or inside a BibTeX database entry, you can press `C-c &'
     (`reftex-view-crossref') to display corresponding locations in the
     document and associated BibTeX database files.
     When the enclosing macro is `\cite' or `\ref' and no other message
     occupies the echo area, information about the citation or label
     will automatically be displayed in the echo area.

  6. Multifile Documents
     Multifile Documents are fully supported.  The included files must
     have a file variable `TeX-master' or `tex-main-file' pointing to
     the master file.  RefTeX provides cross-referencing information
     from all parts of the document, and across document borders
     (`xr.sty').

  7. Document Parsing
     RefTeX needs to parse the document in order to find labels and
     other information.  It does it automatically once and updates its
     list internally when `reftex-label' and `reftex-index' are used.
     To enforce reparsing, call any of the commands described above
     with a raw `C-u' prefix, or press the `r' key in the label
     selection buffer, the table of contents buffer, or the index
     buffer.

  8. AUCTeX
     If your major LaTeX mode is AUCTeX, RefTeX can cooperate with it
     (see variable `reftex-plug-into-AUCTeX').  AUCTeX contains style
     files which trigger appropriate settings in RefTeX, so that for
     many of the popular LaTeX packages no additional customizations
     will be necessary.

  9. Useful Settings
     To make RefTeX faster for large documents, try these:
          (setq reftex-enable-partial-scans t)
          (setq reftex-save-parse-info t)
          (setq reftex-use-multiple-selection-buffers t)

     To integrate with AUCTeX, use
          (setq reftex-plug-into-AUCTeX t)

     To make your own LaTeX macro definitions known to RefTeX,
     customize the variables
          `reftex-label-alist'          (for label macros/environments)
          `reftex-section-levels'       (for sectioning commands)
          `reftex-cite-format'          (for `\cite'-like macros)
          `reftex-index-macros'         (for `\index'-like macros)
          `reftex-index-default-macro'  (to set the default macro)
     If you have a large number of macros defined, you may want to write
     an AUCTeX style file to support them with both AUCTeX and RefTeX.

 10. Where Next?
     Go ahead and use RefTeX.  Use its menus until you have picked up
     the key bindings.  For an overview of what you can do in each of
     the different special buffers, press `?'.  Read the manual if you
     get stuck, of if you are curious what else might be available.
     The first part of the manual explains in a tutorial way how to use
     and customize RefTeX.  The second part is a command and variable
     reference.


File: reftex,  Node: Table of Contents,  Next: Labels and References,  Prev: Introduction,  Up: Top

Table of Contents
*****************

   Pressing the keys `C-c =' pops up a buffer showing the table of
contents of the document.  By default, this `*toc*' buffer shows only
the sections of a document.  Using the `l' and `i' keys you can display
all labels and index entries defined in the document as well.

   With the cursor in any of the lines denoting a location in the
document, simple key strokes will display the corresponding part in
another window, jump to that location, or perform other actions.

   Here is a list of special commands in the `*toc*' buffer.  A summary
of this information is always available by pressing `?'.

General
.......

`?'
     Display a summary of commands.

`0-9, -'
     Prefix argument.

Moving around
.............

`n'
     Goto next entry in the table of context.

`p'
     Goto previous entry in the table of context.

`C-c C-n'
     Goto next section heading.  Useful when many labels and index
     entries separate section headings.

`C-c C-p'
     Goto previous section heading.

`N z'
     Jump to section N, using the prefix arg.  For example, `3 z' jumps
     to section 3.

Access to document locations
............................

`<SPC>'
     Show the corresponding location in another window.  This command
     does _not_ select that other window.

`<TAB>'
     Goto the location in another window.

`<RET>'
     Go to the location and hide the `*toc*' buffer.  This will restore
     the window configuration before `reftex-toc' (`C-c =') was called.

`mouse-2'
     Clicking with mouse button 2 on a line has the same effect as
     <RET>.  See also variable `reftex-highlight-selection', *Note
     Options (Fontification)::.

`f'
     Toggle follow mode.  When follow mode is active, the other window
     will always show the location corresponding to the line at point
     in the `*toc*' buffer.  This is similar to pressing <SPC> after
     each cursor motion.  The default for this flag can be set with the
     variable `reftex-toc-follow-mode'.  Note that only context in
     files already visited is shown.  RefTeX will not visit a file just
     for follow mode.  See, however, the variable
     `reftex-revisit-to-follow'.

`.'
     Show calling point in another window.  This is the point from where
     `reftex-toc' was last called.

Exiting
.......

`q'
     Hide the `*toc*' buffer, return to the position where `reftex-toc'
     was last called.

`k'
     Kill the `*toc*' buffer, return to the position where `reftex-toc'
     was last called.

`C-c >'
     Switch to the `*Index*' buffer of this document.  With prefix `2',
     restrict the index to the section at point in the `*toc*' buffer.

Controlling what gets displayed
...............................

`t'
     Change the maximum level of toc entries displayed in the `*toc*'
     buffer.  Without prefix arg, all levels will be included.  With
     prefix arg (e.g `3 t'), ignore all toc entries with level greater
     than ARG (3 in this case).  Chapters are level 1, sections are
     level 2.  The mode line `T<>' indicator shows the current value.
     The default depth can be configured with the variable
     `reftex-toc-max-level'.

`F'
     Toggle the display of the file borders of a multifile document in
     the `*toc*' buffer.  The default for this flag can be set with the
     variable `reftex-toc-include-file-boundaries'.

`l'
     Toggle the display of labels in the `*toc*' buffer.  The default
     for this flag can be set with the variable
     `reftex-toc-include-labels'.  When called with a prefix argument,
     RefTeX will prompt for a label type and include only labels of the
     selected type in the `*toc*' buffer.  The mode line `L<>'
     indicator shows which labels are included.

`i'
     Toggle the display of index entries in the `*toc*' buffer.  The
     default for this flag can be set with the variable
     `reftex-toc-include-index-entries'.  When called with a prefix
     argument, RefTeX will prompt for a specific index and include only
     entries in the selected index in the `*toc*' buffer.  The mode
     line `I<>' indicator shows which index is used.

`c'
     Toggle the display of label and index context in the `*toc*'
     buffer.  The default for this flag can be set with the variable
     `reftex-toc-include-context'.

Updating the buffer
...................

`g'
     Rebuild the `*toc*' buffer.  This does _not_ rescan the document.

`r'
     Reparse the LaTeX document and rebuild the `*toc*' buffer.  When
     `reftex-enable-partial-scans' is non-nil, rescan only the file this
     location is defined in, not the entire document.

`C-u r'
     Reparse the _entire_ LaTeX document and rebuild the `*toc*' buffer.

`x'
     Switch to the `*toc*' buffer of an external document.  When the
     current document is using the `xr' package (*note xr (LaTeX
     package)::), RefTeX will switch to one of the external documents.

   In order to define additional commands for the `*toc*' buffer, the
keymap `reftex-toc-map' may be used.

   The section macros recognized by RefTeX are all LaTeX section macros
(from `\part' to `\subsubparagraph') and the commands `\addchap' and
`\addsec' from the KOMA-Script classes.  Additional macros can be
configured with the variable `reftex-section-levels'.  It is also
possible to add certain LaTeX environments to the table of contents.
This is probably only useful for theorem-like environments. *Note
Defining Label Environments::, for an example.


File: reftex,  Node: Labels and References,  Next: Citations,  Prev: Table of Contents,  Up: Top

Labels and References
*********************

   LaTeX provides a powerful mechanism to deal with cross-references in
a document.  When writing a document, any part of it can be marked with
a label, like `\label{mark}'.  LaTeX records the current value of a
certain counter when a label is defined.  Later references to this label
(like `\ref{mark}') will produce the recorded value of the counter.

   Labels can be used to mark sections, figures, tables, equations,
footnotes, items in enumerate lists etc.  LaTeX is context sensitive in
doing this: A label defined in a figure environment automatically
records the figure counter, not the section counter.

   Several different environments can share a common counter and
therefore a common label category.  E.g.  labels in both `equation' and
`eqnarray' environments record the value of the same counter - the
equation counter.

* Menu:

* Creating Labels::
* Referencing Labels::
* Builtin Label Environments::       The environments RefTeX knows about.
* Defining Label Environments::        ... and environments it doesn't.
* Reference Info::                   View the label corresponding to a \ref.
* xr (LaTeX package)::               References to external documents.
* varioref (LaTeX package)::         How to create \vref instead of \ref.
* fancyref (LaTeX package)::         How to create \fref instead of \ref.


File: reftex,  Node: Creating Labels,  Next: Referencing Labels,  Up: Labels and References

Creating Labels
===============

   In order to create a label in a LaTeX document, press `C-c ('
(`reftex-label').  Just like LaTeX, RefTeX is context sensitive and
will figure out the environment it currently is in and adapt the label
to that environment.  A label usually consists of a short prefix
indicating the type of the label and a unique mark.  RefTeX has 3
different modes to create this mark.

  1. A label can be derived from context.  This means, RefTeX takes the
     context of the label definition and constructs a label from
     that(1).  This works best for section labels, where the section
     heading is used to construct a label.  In fact, RefTeX's default
     settings use this method only for section labels.  You will be
     asked to confirm the derived label, or edit it.

  2. We may also use a simple unique number to identify a label.  This
     is mostly useful for labels where it is difficult to come up with
     a very good descriptive name.  RefTeX's default settings use this
     method for equations, enumerate items and footnotes.  The author
     of RefTeX tends to write documents with many equations and finds
     it impossible to come up with good names for each of them.  These
     simple labels are inserted without query, and are therefore very
     fast.  Good descriptive names are not really necessary as RefTeX
     will provide context to reference a label (*note Referencing
     Labels::).

  3. The third method is to ask the user for a label.  This is most
     useful for things which are easy to describe briefly and do not
     turn up too frequently in a document.  RefTeX uses this for
     figures and tables.  Of course, one can enter the label directly
     by typing the full `\label{mark}'.  The advantage of using
     `reftex-label' anyway is that RefTeX will know that a new label
     has been defined.  It will then not be necessary to rescan the
     document in order to access this label later.

   If you want to change the way certain labels are created, check out
the variable `reftex-insert-label-flags' (*note Options (Creating
Labels)::).

   If you are using AUCTeX to write your LaTeX documents, you can set
it up to delegate the creation of labels to RefTeX. *Note AUCTeX::, for
more information.

   ---------- Footnotes ----------

   (1) Note that the context may contain constructs which are illegal
in labels.  RefTeX will therefore strip the accent from accented
Latin-1 characters and remove everything else which is not legal in
labels.  This mechanism is safe, but may not be satisfactory for
non-western languages.  Check the following variables if you need to
change things: `reftex-translate-to-ascii-function',
`reftex-derive-label-parameters', `reftex-label-illegal-re',
`reftex-abbrev-parameters'.


File: reftex,  Node: Referencing Labels,  Next: Builtin Label Environments,  Prev: Creating Labels,  Up: Labels and References

Referencing Labels
==================

   Referencing Labels is really at the heart of RefTeX.  Press `C-c )'
in order to reference a label (reftex-reference).  This will start a
selection process and finally insert the complete `\ref{label}' into
the buffer.

   First, RefTeX will determine the label category which is required.
Often that can be figured out from context.  For example, if you write
`As shown in eq.' and the press `C-c )', RefTeX knows that an equation
label is going to be referenced.  If it cannot figure out what label
category is needed, it will query for one.

   You will then be presented with a label selection menu.  This is a
special buffer which contains an outline of the document along with all
labels of the given label category.  In addition, next to the label
there will be one line of context of the label definition, which is some
text in the buffer near the label definition.  Usually this is
sufficient to identify the label.  If you are unsure about a certain
label, pressing <SPC> will show the label definition point in another
window.

   In order to reference a label, move to cursor to the correct label
and press <RET>.  You can also reference several labels with a single
call to `reftex-reference' by marking entries with the `m' key (see
below).

   Here is a list of special commands in the selection buffer.  A
summary of this information is always available from the selection
process by pressing `?'.

General
.......

`?'
     Show a summary of available commands.

`0-9,-'
     Prefix argument.

Moving around
.............

`n'
     Go to next label.

`p'
     Go to previous label.

`b'
     Jump back to the position where you last left the selection buffer.
     Normally this should get you back to the last referenced label.

`C-c C-n'
     Goto next section heading.

`C-c C-p'
     Goto previous section heading.

`N z'
     Jump to section N, using the prefix arg.  For example `3 z' jumps
     to section 3.

Displaying Context
..................

`<SPC>'
     Show the surroundings of the definition of the current label in
     another window.  See also the `f' key.

`f'
     Toggle follow mode.  When follow mode is active, the other window
     will always display the full context of the current label.  This
     is similar to pressing <SPC> after each cursor motion.  Note that
     only context in files already visited is shown.  RefTeX will not
     visit a file just for follow mode.  See, however, the variable
     `reftex-revisit-to-follow'.

`.'
     Show insertion point in another window.  This is the point from
     where you called `reftex-reference'.

Selecting a label and creating the reference
............................................

`<RET>'
     Insert a reference to the label at point into the buffer from
     which the selection process was started.  When entries have been
     marked, <RET> references all marked labels.

`mouse-2'
     Clicking with mouse button 2 on a label will accept it like <RET>
     would. See also variable `reftex-highlight-selection', *Note
     Options (Misc)::.

`m - + ,'
     Mark the current entry.  When several entries have been marked,
     pressing `RET' will accept all of them and place them into several
     `\ref' macros.  The special markers `,-+' also store a separator
     to be inserted before the corresponding reference.  So marking six
     entries with the keys `m , , - , +' will give a reference list
     like this (see the variable `reftex-multiref-punctuation')
          In eqs. (1), (2), (3)--(4), (5) and (6)

`u'
     Unmark a marked entry.

`a'
     Accept the marked entries and put all labels as a comma-separated
     list into one _single_ `\ref' macro.  Some packages like
     `saferef.sty' support multiple references in this way.

`l'
     Use the last referenced label(s) again.  This is equivalent to
     moving to that label and pressing <RET>.

`<TAB>'
     Enter a label with completion.  This may also be a label which
     does not yet exist in the document.

`v'
     Toggle between `\ref' and `\vref' macro for references.  The
     `\vref' macro is defined in the `varioref' LaTeX package.  With
     this key you can force RefTeX to insert a `\vref' macro.  The
     current state of this flag is displayed by the `S<>' indicator in
     the mode line of the selection buffer.

`V'
     Cycle between `\ref', `\fref' and `\Fref'.  The `\fref' and
     `\Fref' macros are defined in the `fancyref' LaTeX package.  With
     this key you can force RefTeX to insert a `\fref' or `\Fref'
     macro.  The current state of this flag is displayed by the `S<>'
     indicator in the mode line of the selection buffer.

Exiting
.......

`q'
     Exit the selection process without inserting any reference into the
     buffer.

Controlling what gets displayed
...............................

     The defaults for the following flags can be configured with the
     variable `reftex-label-menu-flags' (*note Options (Referencing
     Labels)::).

`c'
     Toggle the display of the one-line label definition context in the
     selection buffer.

`F'
     Toggle the display of the file borders of a multifile document in
     the selection buffer.

`t'
     Toggle the display of the table of contents in the selection
     buffer.  With prefix ARG, change the maximum level of toc entries
     displayed to ARG.  Chapters are level 1, section are level 2.

`#'
     Toggle the display of a label counter in the selection buffer.

`%'
     Toggle the display of labels hidden in comments in the selection
     buffers.  Sometimes, you may have commented out parts of your
     document.  If these parts contain label definitions, RefTeX can
     still display and reference these labels.

Updating the buffer
...................

`g'
     Update the menu.  This will rebuilt the menu from the internal
     label list, but not reparse the document (see `r').

`r'
     Reparse the document to update the information on all labels and
     rebuild the menu.  If the variable `reftex-enable-partial-scans' is
     non-`nil' and your document is a multifile document, this will
     reparse only a part of the document (the file in which the label at
     point was defined).

`C-u r'
     Reparse the _entire_ document.

`s'
     Switch the label category.  After prompting for another label
     category, a menu for that category will be shown.

`x'
     Reference a label from an external document.  With the LaTeX
     package `xr' it is possible to reference labels defined in another
     document.  This key will switch to the label menu of an external
     document and let you select a label from there (*note xr: xr
     (LaTeX package).).

   In order to define additional commands for the selection process, the
keymap `reftex-select-label-map' may be used.


File: reftex,  Node: Builtin Label Environments,  Next: Defining Label Environments,  Prev: Referencing Labels,  Up: Labels and References

Builtin Label Environments
==========================

   RefTeX needs to be aware of the environments which can be referenced
with a label (i.e. which carry their own counters).  By default, RefTeX
recognizes all labeled environments and macros discussed in `The LaTeX
Companion by Goossens, Mittelbach & Samarin, Addison-Wesley 1994.'.
These are:

   - `figure', `figure*', `table', `table*', `equation', `eqnarray',
     `enumerate', the `\footnote' macro (this is the LaTeX core stuff)

   - `align', `gather', `multline', `flalign', `alignat', `xalignat',
     `xxalignat', `subequations' (from AMS-LaTeX's `amsmath.sty'
     package)

   - the `\endnote' macro (from `endnotes.sty')

   - `Beqnarray' (`fancybox.sty')

   - `floatingfig' (`floatfig.sty')

   - `longtable' (`longtable.sty')

   - `figwindow', `tabwindow' (`picinpar.sty')

   - `SCfigure', `SCtable' (`sidecap.sty')

   - `sidewaysfigure', `sidewaystable' (`rotating.sty')

   - `subfigure', `subfigure*', the `\subfigure' macro (`subfigure.sty')

   - `supertabular' (`supertab.sty')

   - `wrapfigure' (`wrapfig.sty')

   If you want to use other labeled environments, defined with
`\newtheorem', RefTeX needs to be configured to recognize them (*note
Defining Label Environments::).


File: reftex,  Node: Defining Label Environments,  Next: Reference Info,  Prev: Builtin Label Environments,  Up: Labels and References

Defining Label Environments
===========================

   RefTeX can be configured to recognize additional labeled
environments and macros.  This is done with the variable
`reftex-label-alist' (*note Options (Defining Label Environments)::).
If you are not familiar with Lisp, you can use the `custom' library to
configure this rather complex variable.  To do this, use

     M-x customize-variable <RET> reftex-label-alist <RET>

   Here we will discuss a few examples, in order to make things clearer.
It can also be instructive to look at the constant
`reftex-label-alist-builtin' which contains the entries for all the
builtin environments and macros (*note Builtin Label Environments::).

* Menu:

* Theorem and Axiom::                Defined with `\newenvironment'.
* Quick Equation::                   When a macro sets the label type.
* Figure Wrapper::                   When a macro argument is a label.
* Adding Magic Words::               Other words for other languages.
* Using \eqref::                     How to switch to this AMS-LaTeX macro.
* Non-Standard Environments::        Environments without \begin and \end
* Putting it Together::              How to combine many entries.


File: reftex,  Node: Theorem and Axiom,  Next: Quick Equation,  Up: Defining Label Environments

Theorem and Axiom Environments
------------------------------

   Suppose you are using `\newtheorem' in LaTeX in order to define two
new environments, `theorem' and `axiom'

     \newtheorem{axiom}{Axiom}
     \newtheorem{theorem}{Theorem}

to be used like this:

     \begin{axiom}
     \label{ax:first}
       ....
     \end{axiom}

   So we need to tell RefTeX that `theorem' and `axiom' are new labeled
environments which define their own label categories.  We can either
use Lisp to do this (e.g. in `.emacs') or use the custom library.  With
Lisp it would look like this

     (setq reftex-label-alist
        '(("axiom"   ?a "ax:"  "~\\ref{%s}" nil ("axiom"   "ax.") -2)
          ("theorem" ?h "thr:" "~\\ref{%s}" t   ("theorem" "th.") -3)))

   The type indicator characters `?a' and `?h' are used for prompts
when RefTeX queries for a label type.  `?h' was chosen for `theorem'
since `?t' is already taken by `table'.  Note that also `?s', `?f',
`?e', `?i', `?n' are already used for standard environments.

The labels for Axioms and Theorems will have the prefixes `ax:' and
`thr:', respectively.  *Note AUCTeX::, for information on how AUCTeX
can use RefTeX to automatically create labels when a new environment is
inserted into a buffer.

The `~\ref{%s}' is a format string indicating how to insert references
to these labels.

The next item indicates how to grab context of the label definition.
   - `t' means to get it from a default location (from the beginning of
     a `\macro' or after the `\begin' statement).  `t' is _not_ a good
     choice for eqnarray and similar environments.

   - `nil' means to use the text right after the label definition.

   - For more complex ways of getting context, see the variable
     `reftex-label-alist' (*Note Options (Defining Label
     Environments)::).

   The following list of strings is used to guess the correct label type
from the word before point when creating a reference.  E.g. if you
write: `As we have shown in Theorem' and then press `C-c )', RefTeX
will know that you are looking for a theorem label and restrict the
menu to only these labels without even asking.

   The final item in each entry is the level at which the environment
should produce entries in the table of context buffer.  If the number is
positive, the environment will produce numbered entries (like
`\section'), if it is negative the entries will be unnumbered (like
`\section*').  Use this only for environments which structure the
document similar to sectioning commands.  For everything else, omit the
item.

   To do the same configuration with `customize', you need to click on
the `[INS]' button twice to create two templates and fill them in like
this:

     Reftex Label Alist: [Hide]
     [INS] [DEL] Package or Detailed   : [Value Menu] Detailed:
                 Environment or \macro : [Value Menu] String: axiom
                 Type specification    : [Value Menu] Char  : a
                 Label prefix string   : [Value Menu] String: ax:
                 Label reference format: [Value Menu] String: ~\ref{%s}
                 Context method        : [Value Menu] After label
                 Magic words:
                   [INS] [DEL] String: axiom
                   [INS] [DEL] String: ax.
                   [INS]
                 [X] Make TOC entry    : [Value Menu] Level: -2
     [INS] [DEL] Package or Detailed   : [Value Menu] Detailed:
                 Environment or \macro : [Value Menu] String: theorem
                 Type specification    : [Value Menu] Char  : h
                 Label prefix string   : [Value Menu] String: thr:
                 Label reference format: [Value Menu] String: ~\ref{%s}
                 Context method        : [Value Menu] Default position
                 Magic words:
                   [INS] [DEL] String: theorem
                   [INS] [DEL] String: theor.
                   [INS] [DEL] String: th.
                   [INS]
                 [X] Make TOC entry    : [Value Menu] Level: -3

   Depending on how you would like the label insertion and selection for
the new environments to work, you might want to add the letters `a' and
`h' to some of the flags in the variables `reftex-insert-label-flags'
(*note Options (Creating Labels)::) and `reftex-label-menu-flags'
(*note Options (Referencing Labels)::).


File: reftex,  Node: Quick Equation,  Next: Figure Wrapper,  Prev: Theorem and Axiom,  Up: Defining Label Environments

Quick Equation Macro
--------------------

   Suppose you would like to have a macro for quick equations.  It
could be defined like this:

     \newcommand{\quickeq}[1]{\begin{equation} #1 \end{equation}}

and used like this:

     Einstein's equation is \quickeq{E=mc^2 \label{eq:einstein}}.

   We need to tell RefTeX that any label defined in the argument of the
`\quickeq' is an equation label.  Here is how to do this with lisp:

     (setq reftex-label-alist '(("\\quickeq{}" ?e nil nil 1 nil)))

   The first element in this list is now the macro with empty braces as
an _image_ of the macro arguments.  `?e' indicates that this is an
equation label, the different `nil' elements indicate to use the
default values for equations.  The `1' as the fifth element indicates
that the context of the label definition should be the 1st argument of
the macro.

   Here is again how this would look in the customization buffer:

     Reftex Label Alist: [Hide]
     [INS] [DEL] Package or Detailed   : [Value Menu] Detailed:
                 Environment or \macro : [Value Menu] String: \quickeq{}
                 Type specification    : [Value Menu] Char  : e
                 Label prefix string   : [Value Menu] Default
                 Label reference format: [Value Menu] Default
                 Context method        : [Value Menu] Macro arg nr: 1
                 Magic words:
                   [INS]
                 [ ] Make TOC entry    : [Value Menu] No entry


File: reftex,  Node: Figure Wrapper,  Next: Adding Magic Words,  Prev: Quick Equation,  Up: Defining Label Environments

Figure Wrapping Macro
---------------------

   Suppose you want to make figures not directly with the figure
environment, but with a macro like

     \newcommand{\myfig}[5][tbp]{%
       \begin{figure}[#1]
         \epsimp[#5]{#2}
         \caption{#3}
         \label{#4}
       \end{figure}}

which would be called like

     \myfig[htp]{filename}{caption text}{label}{1}

   Now we need to tell RefTeX that the 4th argument of the `\myfig'
macro _is itself_ a figure label, and where to find the context.

     (setq reftex-label-alist
           '(("\\myfig[]{}{}{*}{}" ?f nil nil 3)))

   The empty pairs of brackets indicate the different arguments of the
`\myfig' macro. The `*' marks the label argument.  `?f' indicates that
this is a figure label which will be listed together with labels from
normal figure environments.  The `nil' entries for prefix and reference
format mean to use the defaults for figure labels.  The `3' for the
context method means to grab the 3rd macro argument - the caption.

   As a side effect of this configuration, `reftex-label' will now
insert the required naked label (without the `\label' macro) when point
is directly after the opening parenthesis of a `\myfig' macro argument.

   Again, here the configuration in the customization buffer:

     [INS] [DEL] Package or Detailed   : [Value Menu] Detailed:
                 Environment or \macro : [Value Menu] String: \myfig[]{}{}{*}{}
                 Type specification    : [Value Menu] Char  : f
                 Label prefix string   : [Value Menu] Default
                 Label reference format: [Value Menu] Default
                 Context method        : [Value Menu] Macro arg nr: 3
                 Magic words:
                   [INS]
                 [ ] Make TOC entry    : [Value Menu] No entry


File: reftex,  Node: Adding Magic Words,  Next: Using \eqref,  Prev: Figure Wrapper,  Up: Defining Label Environments

Adding Magic Words
------------------

   Sometimes you don't want to define a new label environment or macro,
but just change the information associated with a label category.
Maybe you want to add some magic words, for another language.  Changing
only the information associated with a label category is done by giving
`nil' for the environment name and then specify the items you want to
define.  Here is an example which adds German magic words to all
predefined label categories.

     (setq reftex-label-alist
       '((nil ?s nil nil nil ("Kapitel" "Kap." "Abschnitt" "Teil"))
         (nil ?e nil nil nil ("Gleichung" "Gl."))
         (nil ?t nil nil nil ("Tabelle"))
         (nil ?f nil nil nil ("Figur" "Abbildung" "Abb."))
         (nil ?n nil nil nil ("Anmerkung" "Anm."))
         (nil ?i nil nil nil ("Punkt"))))


File: reftex,  Node: Using \eqref,  Next: Non-Standard Environments,  Prev: Adding Magic Words,  Up: Defining Label Environments

Using `\eqref'
--------------

   Another case where one only wants to change the information
associated with the label category is to change the macro which is used
for referencing the label.  When working with the AMS-LaTeX stuff, you
might prefer `\eqref' for doing equation references.  Here is how to do
this:

     (setq reftex-label-alist '((nil ?e nil "~\\eqref{%s}" nil nil)))

   RefTeX has also a predefined symbol for this special purpose.  The
following is equivalent to the line above.

     (setq reftex-label-alist '(AMSTeX))

   Note that this is automatically done by the `amsmath.el' style file
of AUCTeX (*note Style Files::) - so if you use AUCTeX, this
configuration will not be necessary.


File: reftex,  Node: Non-Standard Environments,  Next: Putting it Together,  Prev: Using \eqref,  Up: Defining Label Environments

Non-standard Environments
-------------------------

   Some LaTeX packages define environment-like structures without using
the standard `\begin..\end' structure.  RefTeX cannot parse these
directly, but you can write your own special-purpose parser and use it
instead of the name of an environment in an entry for
`reftex-label-alist'.  The function should check if point is currently
in the special environment it was written to detect.  If so, it must
return a buffer position indicating the start of this environment.  The
return value must be `nil' on failure to detect the environment.  The
function is called with one argument BOUND.  If non-`nil', BOUND is a
boundary for backwards searches which should be observed.  We will
discuss two examples.

   Some people define abbreviations for environments, like `\be' for
`\begin{equation}', and `\ee' for `\end{equation}'.  The parser
function would have to search backward for these macros.  When the
first match is `\ee', point is not in this environment.  When the first
match is `\be', point is in this environment and the function must
return the beginning of the match.  To avoid scanning too far, we can
also look for empty lines which cannot occure inside an equation
environment.  Here is the setup:

     ;; Setup entry in reftex-label-alist, using all defaults for equations
     (setq reftex-label-alist '((detect-be-ee ?e nil nil nil nil)))
     
     (defun detect-be-ee (bound)
       ;; Search backward for the macros or an empty line
       (if (re-search-backward
            "\\(^[ \t]*\n\\|\\\\ee\\>\\)\\|\\(\\\\be\\>\\)" bound t)
           (if (match-beginning 2)
               (match-beginning 2)  ; Return start of environment
             nil)                   ; Return nil because env is closed
         nil))                      ; Return nil for not found

   A more complex example is the `linguex.sty' package which defines
list macros `\ex.', `\a.', `\b.' etc. for lists which are terminated by
`\z.' or by an empty line.

     \ex.  \label{ex:12} Some text in an exotic language ...
           \a. \label{ex:13} more stuff
           \b. \label{ex:14} still more stuff
               \a. List on a deeper level
               \b. Another item
               \b. and the third one
           \z.
           \b. Third item on this level.
     
     ... text after the empty line terminating all lists

   The difficulty is that the `\a.' lists can nest and that an empty
line terminates all list levels in one go.  So we have to count nesting
levels between `\a.' and `\z.'.  Here is the implementation for RefTeX.

     (setq reftex-label-alist
           '((detect-linguex ?x "ex:" "~\\ref{%s}" nil ("Example" "Ex."))))
     
     (defun detect-linguex (bound)
       (let ((cnt 0))
         (catch 'exit
           (while
               ;; Search backward for all possible delimiters
               (re-search-backward
                (concat "\\(^[ \t]*\n\\)\\|\\(\\\\z\\.\\)\\|"
                        "\\(\\ex[ig]?\\.\\)\\|\\(\\\\a\\.\\)")
                nil t)
             ;; Check which delimiter was matched.
             (cond
              ((match-beginning 1)
               ;; empty line terminates all - return nil
               (throw 'exit nil))
              ((match-beginning 2)
               ;; \z. terminates one list level - decrease nesting count
               (decf cnt))
              ((match-beginning 3)
               ;; \ex. : return match unless there was a \z. on this level
               (throw 'exit (if (>= cnt 0) (match-beginning 3) nil)))
              ((match-beginning 4)
               ;; \a. : return match when on level 0, otherwise
               ;;       increment nesting count
               (if (>= cnt 0)
                   (throw 'exit (match-beginning 4))
                 (incf cnt))))))))


File: reftex,  Node: Putting it Together,  Prev: Non-Standard Environments,  Up: Defining Label Environments

Putting it all together
-----------------------

   When you have to put several entries into `reftex-label-alist', just
put them after each other in a list, or create that many templates in
the customization buffer.  Here is a lisp example which uses several of
the entries described above:

     (setq reftex-label-alist
       '(("axiom"   ?a "ax:"  "~\\ref{%s}" nil ("axiom"   "ax.") -2)
         ("theorem" ?h "thr:" "~\\ref{%s}" t   ("theorem" "theor." "th.") -3)
         ("\\quickeq{}" ?e nil nil 1 nil)
         AMSTeX
         ("\\myfig[]{}{}{*}{}" ?f nil nil 3)
         (detect-linguex ?x "ex:" "~\\ref{%s}" nil ("Example" "Ex."))))


File: reftex,  Node: Reference Info,  Next: xr (LaTeX package),  Prev: Defining Label Environments,  Up: Labels and References

Reference Info
==============

   When point is idle on the argument of a `\ref' macro, the echo area
will display some information about the label referenced there.  Note
that the information is only displayed if the echo area is not occupied
by a different message.

   RefTeX can also display the label definition corresponding to a
`\ref' macro, or all reference locations corresponding to a `\label'
macro.  *Note Viewing Cross-References::, for more information.


File: reftex,  Node: xr (LaTeX package),  Next: varioref (LaTeX package),  Prev: Reference Info,  Up: Labels and References

`xr': Cross-Document References
===============================

   The LaTeX package `xr' makes it possible to create references to
labels defined in external documents.  The preamble of a document using
`xr' will contain something like this:

     \usepackage{xr}
     \externaldocument[V1-]{volume1}
     \externaldocument[V3-]{volume3}

and we can make references to any labels defined in these external
documents by using the prefixes `V1-' and `V3-', respectively.

   RefTeX can be used to create such references as well.  Start the
referencing process normally, by pressing `C-c )'.  Select a label type
if necessary.  When you see the label selection buffer, pressing `x'
will switch to the label selection buffer of one of the external
documents.  You may then select a label as before and RefTeX will
insert it along with the required prefix.

   For this kind of inter-document cross-references, saving of parsing
information and the use of multiple selection buffers can mean a large
speed-up (*note Optimizations::).