% $Id: faq-lab-ref.tex,v 1.3 2011/03/09 21:02:45 rf10 Exp rf10 $ \subsection{Labels and references} \Question[Q-nameref]{Referring to things by their name} \LaTeX{}'s labelling mechanism is designed for the impersonal world of the academic publication, in which everything has a number: an extension is necessary if we are to record the \emph{name} of things we've labelled. The two packages available extend the \LaTeX{} sectioning commands to provide reference by the name of the section. The \Package{titleref} package is a simple extension which provides the command \csx{titleref}; it is a stand-alone package~--- don't use it in a document in which you also need to use \Package{hyperref}. The \Package{byname} package is part of the \Package{smartref} bundle and works well with \Package{smartref}, and works (to an extent) with \Package{hyperref}, but the links it defines are not hyperlinks. The \Class{memoir} class incorporates the functionality of \Package{titleref}, but doesn't work with \Package{byname} (though a search of \Newsgroup{comp.text.tex} on \URL{groups.google.com} will find a patch to \Package{byname} to remedy the problem). The \Package{hyperref} bundle includes a package \Package{nameref}, which will work standing alone (i.e., without \Package{hyperref}: of course, in this mode its references are not hyperlinked). If you load \Package{hyperref} itself, \Package{nameref} is automatically loaded. \Class{Memoir} requires the \Package{memhfixc} when running with \Package{hyperref}; following the sequence: \begin{quote} \begin{verbatim} \documentclass[...]{memoir} ... \usepackage[...]{hyperref} \usepackage{memhfixc} \end{verbatim} \end{quote} \Package{nameref} commands may be used in a \Class{memoir} document. \Package{Zref} defines a proposed replacement for all of the \LaTeX{} reference mechanisms, and among other things provides name-referencing mechanisms: \begin{quote} \begin{verbatim} \usepackage[user,titleref]{zref} ... \section{hello}\zlabel{sec:one} The section name is: \ztitleref{sec:one}. \end{verbatim} \end{quote} (One might hope that something of this sort would be the ``way of the future'', but things move slowly in the \LaTeX{} world: don't hold your breath.) Each of \Package{titleref}, \Package{byname} and \Package{nameref} defines a reference command with the same name as the package: \csx{titleref}, \csx{byname} and \csx{nameref}. The \Package{nameref} package also defines a command \csx{byshortnameref}, which uses the optional `short' title argument to the chapter and section commands. (Although it comes from the same author, \Package{zref} \emph{doesn't} define a short-name variant.) \begin{ctanrefs} \item[byname.sty]Distributed with \CTANref{smartref} \item[hyperref.sty]\CTANref{hyperref} \item[memoir.cls]\CTANref{memoir} \item[nameref.sty]Distributed with \CTANref{hyperref} \item[smartref.sty]\CTANref{smartref} \item[titleref.sty]\CTANref{titleref} \item[zref.sty]Distributed as part of \CTANref{oberdiek}[zref] \end{ctanrefs} \Question[Q-extref]{Referring to labels in other documents} When producing a set of inter-related documents, you'll often want to refer to labels in another document of the set; but \LaTeX{}, of its own accord, doesn't permit this. So the package \Package{xr} was written: if you say \begin{quote} \begin{verbatim} \usepackage{xr} \externaldocument{volume1} \end{verbatim} \end{quote} will load all the references from \File{volume1} into your present document. But what if the documents both have a section labelled ``\environment{introduction}'' (likely enough, after all)? The package provides a means to transform all the imported labels, so you don't have to change label names in either document. For example: \begin{quote} \begin{verbatim} \usepackage{xr} \externaldocument[V1-]{volume1} \end{verbatim} \end{quote} loads the references from \File{volume1}, but prefixes every one with the string \texttt{V1-}. So you would refer to the introduction to volume~1 as: \begin{quote} \begin{narrowversion} \begin{verbatim} \usepackage{xr} \externaldocument[V1-]{volume1} ... ... the introduction to volume1 (\ref{V1-introduction})... \end{verbatim} \end{narrowversion} \begin{wideversion} \begin{verbatim} \usepackage{xr} \externaldocument[V1-]{volume1} ... ... the introduction to volume1 (\ref{V1-introduction})... \end{verbatim} \end{wideversion} \end{quote} To have the facilities of \Package{xr} working with \Package{hyperref}, you need \Package{xr-hyper}. For simple hyper-cross-referencing (i.e., to a local \acro{PDF} file you've just compiled), write: \begin{quote} \begin{verbatim} \usepackage{xr-hyper} \usepackage{hyperref} \externaldocument[V1-]{volume1} ... ... the \nameref{V1-introduction})... \end{verbatim} \end{quote} and the name reference will appear as an active link to the ``introduction'' chapter of \File{volume1.pdf}. To link to a \acro{PDF} document on the Web, for which you happen to have the .aux file, write: \begin{quote} \begin{wideversion} \begin{verbatim} \usepackage{xr-hyper} \usepackage{hyperref} \externaldocument[V1-]{volume1}[http://mybook.com/volume1.pdf] ... ... the \nameref{V1-introduction})... \end{verbatim} \end{wideversion} \begin{narrowversion} \begin{verbatim} \usepackage{xr-hyper} \usepackage{hyperref} \externaldocument[V1-]{volume1}% [http://mybook.com/volume1.pdf] ... ... the \nameref{V1-introduction})... \end{verbatim} \end{narrowversion} \end{quote} Heiko Oberdiek's experimental \Package{zref} bundle includes a hyper-crossreferencing mechanism using its \Package{zref-xr} module. Usage is closely modelled on \Package{xr} and \Package{xr-hyper}; a trivial example (from a \Newsgroup{comp.text.tex} posting) is \begin{quote} \begin{verbatim} \usepackage{zref-xr,zref-user} \zexternaldocument*{xr02} ... \zref{foo} \end{verbatim} \end{quote} The module provides all the facilities of the older packages, and can deal both with ``traditional'' \LaTeX{} labels and with \Package{zref}'s style of labels. \begin{ctanrefs} \item[xr.sty]Distributed as part of \CTANref{2etools}[xr] \item[xr-hyper.sty]Distributed with \CTANref{hyperref}[xr-hyper] \item[zref \nothtml{\rmfamily\itshape}bundle]Distributed as part of \CTANref{oberdiek}[zref] \end{ctanrefs}