% \iffalse meta-comment % % Copyright 1994 the LaTeX3 project and the individual authors. % All rights reserved. For further copyright information see the file % legal.txt, and any other copyright indicated in this file. % % This file is part of the LaTeX2e system. % ---------------------------------------- % % This system is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. % % % IMPORTANT NOTICE: % % For error reports in case of UNCHANGED versions see bugs.txt. % % Please do not request updates from us directly. Distribution is % done through Mail-Servers and TeX organizations. % % You are not allowed to change this file. % % You are allowed to distribute this file under the condition that % it is distributed together with all files mentioned in manifest.txt. % % If you receive only some of these files from someone, complain! % % You are NOT ALLOWED to distribute this file alone. You are NOT % ALLOWED to take money for the distribution or use of either this % file or a changed version, except for a nominal charge for copying % etc. % \fi % % \iffalse %%% File: ltxref % %<*driver> % \fi \ProvidesFile{ltxref.dtx} [1994/05/25 v1.1c LaTeX Kernel (Cross Referencing)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltxref.dtx} \title{\filename} \date{\filedate} \author{% Johannes Braams\and David Carlisle\and Alan Jeffrey\and Leslie Lamport\and Frank Mittelbach\and Chris Rowley\and Rainer Sch\"opf} \begin{document} \maketitle \DocInput{\filename} \end{document} % % \fi % % \CheckSum{102} % % \changes{v1.0c}{1994/03/29} % {Create file ltcntlen from parts of ltmiscen and ltherest.} % \changes{v1.1a}{1994/05/19} % {Extract file ltxref from ltcntlen.} % \changes{v1.1b}{1994/05/21}{Use new warning commands} % \changes{v1.1c}{1994/05/25}{Modify documentation} % % \section{Cross Referencing} % The user writes |\label|\marg{foo} to define the following % cross-references: % % |\ref|\marg{foo}: value of most recently incremented referencable % counter. in the current environment. (Chapter, section, % theorem and enumeration counters counters are % referencable, footnote counters are not.) % % |\pageref|\marg{foo}: page number at which |\label{foo}| command % appeared. where foo can be any string of characters not % containing `|\|', `|{|' or `|}|'. % % Note: The scope of the |\label| command is delimited by environments, % so\\ % |\begin{theorem} \label{foo} ... \end{theorem} \label{bar}|\\ % defines |\ref{foo}| to be the theorem number and |\ref{bar}| to be % the current section number. % % Note: |\label| does the right thing in terms of spacing -- i.e., % leaving a space on both sides of it is equivalent to leaving % a space on either side. % % % \StopEventually{} % % \subsection{Cross Referencing} % % \begin{oldcomments} % \begin{macrocode} %<*2ekernel> \message{x-ref,} % \end{macrocode} % % This is implemented as follows. A referencable counter CNT is % incremented by the command \refstepcounter{CNT} , which sets % \@currentlabel == {CNT}{eval(\p@cnt\theCNT)}. The command % \label{FOO} then writes the following on file \@auxout : % \newlabel{FOO}{{eval(\@currentlabel)}{eval(\thepage)}} % % \ref{FOO} == % BEGIN % if \r@foo undefined % then @refundefined := G T % ?? % Warning: 'reference foo on page ... undefined' % else \@car \eval(\r@FOO)\@nil % fi % END % % \pageref{foo} = % BEGIN % if \r@foo undefined % then @refundefined := G T % ?? % Warning: 'reference foo on page ... undefined' % else \@cdr \eval(\r@FOO)\@nil % fi % END % % \begin{macrocode} \newif\ifG@refundefined \def\G@refundefinedtrue{\global\let\ifG@refundefined\iftrue} \def\G@refundefinedfalse{\global\let\ifG@refundefined\iffalse} % \end{macrocode} % % RmS 91/10/25: added a few extra \reset@font, % as suggested by Bernd Raichle % RmS 92/08/14: made \ref and \pageref robust % RmS 93/09/08: Added setting of @refundefined switch. % \end{oldcomments} % % \begin{macro}{\ref} % \changes{LaTeX2e}{1993/12/11}{Macro reimplemented} % \begin{macro}{\pageref} % \changes{LaTeX2e}{1993/12/11}{Macro reimplemented} % \begin{macro}{\@setref} % \changes{LaTeX2e}{1993/12/11}{Macro added} % Referencing a |\label|. % \begin{macrocode} \def\@setref#1#2#3{% \ifx#1\relax \protect\G@refundefinedtrue \nfss@text{\reset@font\bfseries ??}% \@latex@warning{Reference `#3' on page \thepage \space undefined}% \else \expandafter#2#1\null \fi} \def\ref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}} \def\pageref#1{\expandafter\@setref\csname r@#1\endcsname \@secondoftwo{#1}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % % \begin{macro}{\newlabel} % \changes{v1.1b}{1994/05/21}{Use new warning commands} % This command will be written to the \texttt{.aux} file to % pass label information from one run to another. % \begin{macrocode} \def\newlabel#1#2{\@ifundefined{r@#1}% {}% {\global\@multiplelabelstrue \@latex@warning@no@line{Label `#1' multiply defined}}% \global\@namedef{r@#1}{#2}} % \end{macrocode} % \end{macro} % % \begin{macro}{\if@multiplelabels} % This switch is set true if at least on label is defined more than % once. It will be check by the |\enddocument| command. % \begin{macrocode} \newif\if@multiplelabels % \end{macrocode} % \end{macro} % % |\label| and |\refstepcounter| changed to allow |\protect|'ed commands % to work properly. For example, %\begin{verbatim} % \def\thechapter{\protect\foo{\arabic{chapter}.\roman{section}}} %\end{verbatim} % will cause a |\label{bar}| command to define |\ref{bar}| to expand to % something like |\foo{4.d}|. Change made 20 Jul 88. % \begin{macrocode} \def\label#1{\@bsphack\if@filesw {\let\thepage\relax \let\protect\@unexpandable@noexpand \edef\@tempa{\write\@auxout{\string \newlabel{#1}{{\@currentlabel}{\thepage}}}}% \expandafter}\@tempa \if@nobreak \ifvmode\nobreak\fi\fi\fi\@esphack} % \end{macrocode} % % \begin{macrocode} \def\refstepcounter#1{\stepcounter{#1}\let\@tempa\protect \let\protect\@unexpandable@protect \edef\@currentlabel{\csname p@#1\endcsname\csname the#1\endcsname}% \let\protect\@tempa} % \end{macrocode} % % % For |\label| commands that come before any environment % \begin{macrocode} \def\@currentlabel{} % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \Finale %