[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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.
3.1 Creating Labels | ||
3.2 Referencing Labels | ||
3.3 Builtin Label Environments | The environments RefTeX knows about. | |
3.4 Defining Label Environments | ... and environments it doesn't. | |
3.5 Reference Info | View the label corresponding to a \ref. | |
3.6 xr : Cross-Document References | References to external documents. | |
3.7 varioref : Variable Page References | How to create \vref instead of \ref. | |
3.8 fancyref : Fancy Cross References | How to create \fref instead of \ref. |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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.
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
(see section 8.3 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. See section 6.8 AUC TeX, for more information.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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 ?.
reftex-revisit-to-follow
.
reftex-reference
.
reftex-highlight-selection
, 8.11 Miscellaneous.
\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) |
\ref
macro. Some packages like
`saferef.sty' support multiple references in this way.
\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.
\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.
reftex-label-menu-flags
(see section 8.4 Referencing Labels).
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).
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 (see section xr).
In order to define additional commands for the selection process, the
keymap reftex-select-label-map
may be used.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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)
\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 (see section 3.4 Defining Label Environments).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
RefTeX can be configured to recognize additional labeled
environments and macros. This is done with the variable
reftex-label-alist
(see section 8.2 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 (see section 3.3 Builtin Label Environments).
3.4.1 Theorem and Axiom Environments | Defined with \newenvironment . | |
3.4.2 Quick Equation Macro | When a macro sets the label type. | |
3.4.3 Figure Wrapping Macro | When a macro argument is a label. | |
3.4.4 Adding Magic Words | Other words for other languages. | |
3.4.5 Using \eqref | How to switch to this AMS-LaTeX macro. | |
3.4.6 Non-standard Environments | Environments without \begin and \end | |
3.4.7 Putting it all together | How to combine many entries. |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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. See section 6.8 AUC TeX, for information on how AUCTeX can use RefTeX to automatically create labels when a new environment is inserted into a buffer. Additionally, the following needs to be added to one's .emacs file before AUCTeX will automatically create labels for the new environments.
(add-hook 'LaTeX-mode-hook (lambda () (LaTeX-add-environments '("axiom" LaTeX-env-label) '("theorem" LaTeX-env-label)))) |
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.
reftex-label-alist
(8.2 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
(see section 8.3 Creating Labels)
and reftex-label-menu-flags
(see section 8.4 Referencing Labels).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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 |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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 |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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")))) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
\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 (see section 6.8.2 Style Files) - so if you use AUCTeX, this configuration will not be necessary.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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 occur 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)))))))) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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.")))) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
When point is idle for more than reftex-idle-time
seconds 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. See section 6. Viewing Cross--References, for more
information.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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 (see section 6.7 Optimizations).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
varioref
: Variable Page References varioref
is a frequently used LaTeX package to create
cross--references with page information. When you want to make a
reference with the \vref
macro, just press the v key in the
selection buffer to toggle between \ref
and \vref
(see section 3.2 Referencing Labels). The mode line of the selection buffer
shows the current status of this switch. If you find that you almost
always use \vref
, you may want to make it the default by
customizing the variable reftex-vref-is-default
. If this
toggling seems too inconvenient, you can also use the command
reftex-varioref-vref
(2).
Or use AUCTeX to create your macros (see section 6.8 AUC TeX).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
fancyref
: Fancy Cross References fancyref
is a LaTeX package where a macro call like
\fref{fig:map-of-germany}
creates not only the number of
the referenced counter but also the complete text around it, like
`Figure 3 on the preceding page'. In order to make it work you
need to use label prefixes like `fig:' consistently - something
RefTeX does automatically. When you want to make a reference
with the \fref
macro, just press the V key in the selection
buffer to cycle between \ref
, \fref
and \Fref
(see section 3.2 Referencing Labels). The mode line of the selection buffer
shows the current status of this switch. If this cycling seems
inconvenient, you can also use the commands reftex-fancyref-fref
and reftex-fancyref-Fref
(3). Or use AUCTeX to create your macros
(see section 6.8 AUC TeX).
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by XEmacs shared group account on December, 19 2009
using texi2html 1.65.