diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/hyperref/nameref.dtx |
Initial commit
Diffstat (limited to 'macros/latex/contrib/hyperref/nameref.dtx')
-rw-r--r-- | macros/latex/contrib/hyperref/nameref.dtx | 903 |
1 files changed, 903 insertions, 0 deletions
diff --git a/macros/latex/contrib/hyperref/nameref.dtx b/macros/latex/contrib/hyperref/nameref.dtx new file mode 100644 index 0000000000..ace38a90d7 --- /dev/null +++ b/macros/latex/contrib/hyperref/nameref.dtx @@ -0,0 +1,903 @@ +% \iffalse +%% File: nameref.dtx +%% Copyright (C) 1995-1999 Sebastian Rahtz +%% 2000 Sebastian Rahtz, Heiko Oberdiek +%% 2001-2012 Heiko Oberdiek +%% 2016 Oberdiek Package Suport Group +%% https://github.com/ho-tex/hyperref/issues +%% +%% This file is part of the `Hyperref Bundle'. +%% ------------------------------------------- +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Heiko Oberdiek. +%% +%% The list of all files belonging to the `Hyperref Bundle' is +%% given in the file `manifest.txt'. +% +%<*dtx> +\ProvidesFile{nameref.dtx} +%</dtx> +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{nameref} +%<driver>\ProvidesFile{nameref.drv} +% \fi +% \ProvidesFile{nameref.dtx} + [2016/05/21 v2.44 Cross-referencing by name of section]% +% +% \CheckSum{714} +% +% \iffalse +%<*driver> +\documentclass{ltxdoc} +\usepackage[numbered]{hypdoc} +\usepackage{bmhydoc} +\usepackage{hologo} +\EnableCrossrefs +\CodelineIndex +\newcommand*{\xpackage}[1]{\textsf{#1}} +\begin{document} + \GetFileInfo{nameref.sty}% + \title{% + Section name references in \LaTeX + \thanks{% + This file has version number \fileversion, % + last revised \filedate.% + }% + }% + \author{Sebastian Rahtz (deceased)\\% + Heiko Oberdiek (maintainer)\\% + \texttt{https://github.com/ho-tex/hyperref/issues}}% + \date{\filedate}% + \maketitle + \makeatletter + \@ifundefined{HyperrefOverview}{}{% + \HyperrefOverview*% + }% + \tableofcontents + \DocInput{nameref.dtx}% + \PrintIndex +\end{document} +%</driver> +% \fi +% +% \StopEventually{} +% +% \section{Introduction} +% Cross-referencing to include the \emph{name} of the section, rather than +% just the number or page. This works by redefining some of the inside +% \LaTeX\ macros, so it is vulnerable to future changes. +% \section{History} +% Sebastian Rahtz, for Lou Burnard, March 15th 1994;\\ +% SPQR CERN July 1994;\\ +% Last mod. Sept. 3th MG;\\ +% Sept. 19th SPQR;\\ +% April 11th 1995 SPQR (added section formatting hook);\\ +% April 14th 1995 SPQR (compatibility with hyperref);\\ +% June 22 1995 SPQR (removed typeout from Sectionformat);\\ +% September 22 1997 added varioref hacks by Corey Minyard;\\ +% September 28th changes by David Carlisle.\\ +% More recent changes are recorded in ChangeLog. +% +% The versions before 2009/11/27 v2.32 did not expand the +% title strings (of \cs{section}, \cs{caption}, \dots). +% Then the behaviour switched to expanding, because this +% allows to remove unwanted macros (\cs{label}, \dots). +% Despite this method is used in package \textsf{titleref} +% and class \textsf{memoir}, the first feedbacks let me conclude +% that this is not robust enough. Therefore I wrote package +% \textsf{gettitlestring} that uses the non-expanding +% method as default. It also allows me to use this package +% in package \textsf{zref-titleref}. +% See the package documentation of package \textsf{gettitlestring} +% how to change the method. It also provides a hook to remove +% additional unwanted macros, not supported by the package. +% Example: +%\begin{quote} +%\begin{verbatim} +%\usepackage{gettitlestring} +%\GetTitleStringDisableCommands{% +% \let\mylabel\@gobble +% \renewcommand\myindex[2]{}% +%} +%\end{verbatim} +%\end{quote} +% +% \section{Implementation} +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \begin{macrocode} +\RequirePackage{refcount}[2006/02/12] +\RequirePackage{gettitlestring}[2009/12/18] +\RequirePackage{ltxcmds}[2009/12/12] +% \end{macrocode} +% +% We redefine |\label| so that it also writes the name of the +% current section to the .aux file; if the name ends in a dot, +% we zap it. To allow for the \xpackage{hyperref} package, also write +% fourth and fifth fields (empty by default; +% used for cross-ref name, and file). +% \begin{macro}{\NR@strip@period} +% \begin{macrocode} +\def\NR@strip@period#1.\ltx@empty#2\@nil{#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\strip@period} +% Macro \cs{strip@period} was removed in \xpackage{nameref} +% 2012/07/28 v2.41 and reinserted in 2012/07/31 v2.42 for compatibilty +% reasons with package \xpackage{subfig}. +% \begin{macrocode} +\def\strip@period#1.\relax#2\@@@{#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\def\NR@sanitize@labelname{% + \@onelevel@sanitize\@currentlabelname + \edef\@currentlabelname{% + \expandafter\NR@strip@period\@currentlabelname + \ltx@empty.\ltx@empty\@nil + }% +} +% \end{macrocode} +% +% \subsection{\cs{label} stuff} +% +% Here is tested, whether package \xpackage{showkeys} is loaded. +% But if option final is used, the macros of \xpackage{showkeys} +% are not defined, so we have to check an additional +% test. +% \begin{macro}{\ifNR@showkeys} +% \begin{macrocode} +\newif\ifNR@showkeys +\NR@showkeysfalse +\@ifpackageloaded{showkeys}{% + \begingroup + \@ifundefined{SK@@label}{% + }{% + \global\NR@showkeystrue + }% + \endgroup +}{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\label@hook} +% \begin{macrocode} +\providecommand*{\label@hook}{} +\ltx@GlobalAppendToMacro{\label@hook}{% + \NR@sanitize@labelname +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\label} +% \begin{macrocode} +\def\label#1{% + \@bsphack + \begingroup + \def\label@name{#1}% + \label@hook + \protected@write\@auxout{}{% + \string\newlabel{#1}{% + {\@currentlabel}% + {\thepage}% + {\@currentlabelname}% + {\@currentHref}{}% + }% + }% + \endgroup + \@esphack +}% +\ifNR@showkeys + \def\label#1{% + \@bsphack + \SK@\SK@@label{#1}% + \begingroup + \def\label@name{#1}% + \label@hook + \protected@write\@auxout{}{% + \string\newlabel{#1}{% + {\@currentlabel}% + {\thepage}% + {\@currentlabelname}% + {\@currentHref}{}% + }% + }% + \endgroup + \@esphack + }% +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltx@label} +% \begin{macrocode} +\let\ltx@label\label +% \end{macrocode} +% \end{macro} +% Needed for the \emph{subeqnarray} package. +% \begin{macro}{\slabel} +% \begin{macrocode} +\@ifundefined{slabel}{}{% + \def\slabel#1{% + \@bsphack + \if@filesw + \begingroup + \def\label@name{#1}% + \label@hook + \let\thepage\relax + \def\protect{\noexpand\noexpand\noexpand}% + \edef\@tempa{% + \write\@auxout{% + \string\newlabel{#1}{% + {\thesubequation}% + {\thepage}% + {\@currentlabelname}% + {\@currentHref}{}% + }% + }% + }% + \expandafter\endgroup + \@tempa + \if@nobreak\ifvmode\nobreak\fi\fi + \fi + \@esphack + }% +} +% \end{macrocode} +% \end{macro} +% Overload an AMS \hologo{LaTeX} command, which uses |\newlabel|. Sigh! +% \begin{macro}{\@writetocindents@} +% \begin{macrocode} +\def\@writetocindents@{% + \begingroup + \@for\@tempa:=-1,0,1,2,3\do{% + \immediate\write\@auxout{% + \string\newlabel{tocindent\@tempa}{% + \csname r@tocindent\@tempa\endcsname{}{}{}{}% + }% + }% + }% + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Changes of section macros} +% +% Add to the underlying section heading macros so that they +% note the section name for use by label. +% +% If a section heading or the like has a |\label| in it, +% we need to extract it, or subsequent processing breaks. +% +% \begin{macro}{\NR@gettitle} +% \begin{macrocode} +\def\NR@gettitle#1{% + \GetTitleString{#1}% + \let\@currentlabelname\GetTitleStringResult +} +% \end{macrocode} +% \end{macro} +% +% First the numbered sections. While we are about it, put in +% a useful section formatting macro. +% \begin{macro}{\NR@sect} +% \begin{macrocode} +\let\NR@sect\@sect +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\newcounter{section@level} +% \end{macrocode} +% \begin{macro}{\@sect} +% \begin{macrocode} +\def\@sect#1#2#3#4#5#6[#7]#8{% + \setcounter{section@level}{#2}% + \NR@gettitle{#7}% + \NR@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{\Sectionformat{#8}{#2}}% +} +% \end{macrocode} +% \end{macro} +% and now the unnumbered ones +% \begin{macro}{\NR@ssect} +% \begin{macrocode} +\let\NR@ssect\@ssect +% \end{macrocode} +% \end{macro} +% \begin{macro}{\NR@ssect} +% \begin{macrocode} +\def\@ssect#1#2#3#4#5{% + \NR@gettitle{#5}% + \NR@ssect{#1}{#2}{#3}{#4}{\Sectionformat{#5}{#1}}% +} +% \end{macrocode} +% \end{macro} +% +% Support for class memoir. +% +% \begin{macrocode} +\ltx@IfUndefined{ifheadnameref}{% +}{% + \ltx@IfUndefined{M@sect}{% + }{% + \let\NRorg@M@sect\M@sect + \def\M@sect#1#2#3#4#5#6[#7][#8]{% + \ifheadnameref + \NR@gettitle{#8}% + \else + \NR@gettitle{#7}% + \fi + \NRorg@M@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}][{#8}]% + }% + }% +} +% \end{macrocode} +% +% Parts and chapters are treated differently. sigh. +% \cs{@part} and \cs{@spart} are \cs{long} because of class memoir. +% +% \begin{macrocode} +\let\NR@part\@part +\long\def\@part[#1]#2{% + \NR@gettitle{#1}% + \NR@part[{#1}]{#2}% +} +\let\NR@spart\@spart +\long\def\@spart#1{% + \NR@gettitle{#1}% + \NR@spart{#1}% +} +\let\NR@chapter\@chapter +\def\@chapter[#1]#2{% + \NR@gettitle{#1}% + \NR@chapter[{#1}]{#2}% +} +\@ifclassloaded{memoir}{% + \ltx@IfUndefined{ifheadnameref}{% + }{% + \def\@chapter[#1]#2{% + \ltx@IfUndefined{ch@pt@c}{% + \NR@gettitle{#1}% + }{% + \ifx\ch@pt@c\ltx@empty + \NR@gettitle{#2}% + \else + \def\NR@temp{#1}% + \ifx\NR@temp\ltx@empty + \expandafter\NR@gettitle\expandafter{\ch@pt@c}% + \else + \ifheadnameref + \NR@gettitle{#1}% + \else + \expandafter\NR@gettitle\expandafter{\ch@pt@c}% + \fi + \fi + \fi + }% + \NR@chapter[{#1}]{#2}% + }% + }% +}{} +\let\NR@schapter\@schapter +\def\@schapter#1{% + \NR@gettitle{#1}% + \NR@schapter{#1}% +} +% \end{macrocode} +% +% Captions +% +% \begin{macrocode} +\AtBeginDocument{% + \@ifpackageloaded{hyperref}{% + \@ifpackagelater{hyperref}{2009/12/05}\@gobble\@firstofone + }\@firstofone + {% + \let\NR@@caption\@caption + \long\def\@caption#1[#2]{% + \NR@gettitle{#2}% + \NR@@caption{#1}[{#2}]% + }% + }% +% \end{macrocode} +% +% \begin{macrocode} + \@ifpackageloaded{longtable}{% + \let\NRorg@LT@c@ption\LT@c@ption + \def\LT@c@ption#1[#2]#3{% + \NRorg@LT@c@ption{#1}[{#2}]{#3}% + \def\@tempa{#2}% + \ifx\@tempa\@empty + \else + \NR@gettitle{#2}% + \fi + }% + }{}% +% \end{macrocode} +% +% Environment `description'. +% \begin{macrocode} + \ltx@IfUndefined{descriptionlabel}{% + }{% + \let\NRorg@descriptionlabel\descriptionlabel + \def\descriptionlabel#1{% + \NR@gettitle{#1}% + \NRorg@descriptionlabel{#1}% + }% + }% +} +% \end{macrocode} +% +% Compatibility for package titlesec. +% \begin{macrocode} +\AtBeginDocument{% + \@ifpackageloaded{titlesec}{% + \let\NRorg@ttl@sect@i\ttl@sect@i + \def\ttl@sect@i#1#2[#3]#4{% + \NR@gettitle{#4}% + \NRorg@ttl@sect@i{#1}{#2}[{#3}]{#4}% + }% + }{}% +} +% \end{macrocode} +% +% \subsubsection{Class beamer} +% +% \begin{macrocode} +\@ifclassloaded{beamer}{% + \def\NR@PatchBeamer#1{% + \expandafter\let\csname NRorg@beamer@#1\expandafter\endcsname + \csname beamer@#1\endcsname + \begingroup + \edef\x{\endgroup + \long\def\expandafter\noexpand\csname beamer@#1\endcsname + [####1]{% hash-ok + \noexpand\NR@gettitle{####1}% + \expandafter\noexpand\csname NRorg@beamer@#1\endcsname + [{####1}]% + }% + }% + \x + }% + \NR@PatchBeamer{section}% + \NR@PatchBeamer{subsection}% + \NR@PatchBeamer{subsubsection}% +% \end{macrocode} +% +% Theorem names. +% \begin{macrocode} + \addtobeamertemplate{theorem begin}{% + \expandafter\NR@gettitle\expandafter{\inserttheoremaddition}% + }{}% +% \end{macrocode} +% \begin{macrocode} + \@ifdefinable{\NRorg@beamer@descriptionitem}{% + \let\NRorg@beamer@descriptionitem\beamer@descriptionitem + \renewcommand{\beamer@descriptionitem}[1]{% + \NR@gettitle{#1}% + \NRorg@beamer@descriptionitem{#1}% + }% + }% +}{} +% \end{macrocode} +% +% \subsubsection{Theorems} +% +% \begin{macrocode} +\ltx@IfUndefined{@opargbegintheorem}{}{% + \let\NRorg@opargbegintheorem\@opargbegintheorem + \def\@opargbegintheorem#1#2#3{% + \NR@gettitle{#3}% + \NRorg@opargbegintheorem{#1}{#2}{#3}% + }% +} +\AtBeginDocument{% + \@ifpackageloaded{amsthm}{% + \let\NRorg@begintheorem\@begintheorem + \begingroup + \edef\x{macro:\string#1\string#2[\string#3]}% + \@onelevel@sanitize\x + \def\y#1->#2\@nil{#1}% + \edef\z{\expandafter\y\meaning\@begintheorem->\@nil}% + \@onelevel@sanitize\z + \expandafter\endgroup + \ifx\x\z + \def\@begintheorem#1#2[#3]{% + \NR@gettitle{#3}% + \NRorg@begintheorem{#1}{#2}[{#3}]% + }% + \fi + }{}% +} +% \end{macrocode} +% +% \subsection{Referencing stuff} +% +% We default the label and hypertext reference to be empty. +% \begin{macrocode} +\providecommand*{\@currentlabelname}{} +\providecommand*{\@currentHref}{} +% \end{macrocode} +% Since the second part of the preserved reference now has five parts +% (number, page, name, hypertext reference and file), we need extra utility +% macros: +% \begin{macro}{\@firstoffive} +% \begin{macrocode} +\long\def\@firstoffive#1#2#3#4#5{#1} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@secondoffive} +% \begin{macrocode} +\long\def\@secondoffive#1#2#3#4#5{#2} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@thirdoffive} +% \begin{macrocode} +\long\def\@thirdoffive#1#2#3#4#5{#3} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@fourthoffive} +% \begin{macrocode} +\long\def\@fourthoffive#1#2#3#4#5{#4} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@offive} +% \begin{macrocode} +\long\def\@fifthoffive#1#2#3#4#5{#5} +% \end{macrocode} +% \end{macro} +% We have to redefine |\ref| and |\pageref| to know about extra +% reference elements. Make them robust, and compatible with Babel. +% The Babel switch is mimicked if not already defined. +% Some support for package \xpackage{showkeys} is implemented. If +% option |notref| of that package is set, |\SK@ref| has the +% meaning of |\@empty|. +% \begin{macro}{\@safe@activestrue} +% \begin{macrocode} +\providecommand*\@safe@activestrue{}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@safe@activesfalse} +% \begin{macrocode} +\providecommand*\@safe@activesfalse{}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\NR@setref} +% \begin{macrocode} +\def\NR@setref#1{% + \begingroup + \@safe@activestrue + \expandafter + \endgroup + \expandafter\NR@@setref\csname r@#1\endcsname +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\NR@@setref} +% \begin{macrocode} +\def\NR@@setref#1{% + \ifx\@undefined#1% + \let#1\relax + \fi + \@setref#1% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\T@ref} +% \begin{macrocode} +\def\T@ref#1{% + \NR@setref{#1}\@firstoffive{#1}% +}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\T@pageref} +% \begin{macrocode} +\def\T@pageref#1{% + \NR@setref{#1}\@secondoffive{#1}% +}% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\ifNR@showkeys + \ifx\SK@ref\@empty + \else +% \end{macrocode} +% \begin{macro}{\T@ref} +% \begin{macrocode} + \def\T@ref#1{% + \@safe@activestrue + \SK@\SK@@ref{#1}% + \@safe@activesfalse + \NR@setref{#1}\@firstoffive{#1}% + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\T@pageref} +% \begin{macrocode} + \def\T@pageref#1{% + \@safe@activestrue + \SK@\SK@@ref{#1}% + \@safe@activesfalse + \NR@setref{#1}\@secondoffive{#1}% + }% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} + \fi +\fi +% \end{macrocode} +% Package \xpackage{hyperref} uses its own definitions of |\ref| and +% |\pageref| because it extends the syntax by the star form. +% |\DeclareRobustCommand| is used by \xpackage{hyperref}. +% Package |nameref| can be loaded before, after +% \xpackage{hyperref} or after +% \xpackage{hyperref}'s definitions in |\AtBeginDocument|. +% \begin{macrocode} +\@ifpackageloaded{hyperref}{% +}{% +% \end{macrocode} +% \begin{macro}{\ref} +% \begin{macrocode} + \DeclareRobustCommand{\ref}{\T@ref}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pageref} +% \begin{macrocode} + \DeclareRobustCommand{\pageref}{\T@pageref}% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +} +% \end{macrocode} +% +% \subsection{Usage and frontend} +% Access the (third) name part with |\nameref|; +% \begin{macro}{\T@nameref} +% \begin{macrocode} +\def\T@nameref#1{% + \begingroup + \let\label\@gobble + \NR@setref{#1}\@thirdoffive{#1}% + \endgroup +}% +\ifNR@showkeys + \ifx\SK@ref\@empty + \else + \def\T@nameref#1{% + \@safe@activestrue + \SK@\SK@@ref{#1}% + \@safe@activesfalse + \begingroup + \let\label\@gobble + \NR@setref{#1}\@thirdoffive{#1}% + \endgroup + }% + \fi +\fi +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +%\@ifclassloaded{memoir}{% +% \ltx@IfUndefined{@mem@titlerefnolink}\ltx@secondoftwo{% +% \ltx@IfUndefined{@mem@titleref}\ltx@secondoftwo\ltx@firstoftwo +% }% +%}\ltx@secondoftwo +%{% +% \DeclareRobustCommand*{\nameref}{% +% \@ifstar\@mem@titlerefnolink\@mem@titleref +% }% +%}{% +% \end{macrocode} +% \begin{macro}{\nameref} +% \begin{macrocode} + \DeclareRobustCommand*{\nameref}{% + \@ifstar\T@nameref\T@nameref + }% +%} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Nameref} +% An extended form which gives title and page number. +% \begin{macrocode} +\def\Nameref#1{`\nameref{#1}' on page~\pageref{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Sectionformat} +% The default for |\Sectionformat| +% \begin{macrocode} +\providecommand\Sectionformat[2]{#1} +% \end{macrocode} +% \end{macro} +% +% \subsection{Package ifthen support} +% +% Package ifthen's \cmd{\isodd} does not work with +% \cmd{\pageref} because of the extra link and the +% star form. Therefore we need an expandable variant. +% +% Unfortunately there is no hook in \cmd{\ifthenelse} in order +% to provide expandable versions without link of \cmd{\ref} +% and \cmd{\pageref}. As possible target I could only find +% \cmd{\begingroup}: +% \begin{macrocode} +\@ifpackageloaded{ifthen}{% + \let\NROrg@ifthenelse\ifthenelse + \def\ifthenelse{% + \let\begingroup\NR@TE@begingroup + \NROrg@ifthenelse + }% + \let\NROrg@begingroup\begingroup + \def\NR@TE@begingroup{% + \let\begingroup\NROrg@begingroup + \begingroup + \def\ref##1{\getrefbykeydefault{##1}{}{??}}% + \def\pageref##1{\getrefbykeydefault{##1}{page}{0}}% + }% +}{} +% \end{macrocode} +% +% \subsection{Compatibility with varioref} +% +% [This section was derived by Corey Minyard \texttt{minyard@acm.org} +% from the \xpackage{varioref} package] +% \begin{macrocode} +\AtBeginDocument{% + \ifx\csname @@vpageref\endcsname\relax + \else + \def\@@vpageref#1[#2]#3{% + \begingroup + \csname @safe@activestrue\endcsname + \edef\x{#3}% + \@onelevel@sanitize\x + \toks@{% + \NR@@vpageref{#1}[{#2}]% + }% + \edef\x{\endgroup + \the\toks@{\x}% + }% + \x + }% + \def\NR@@vpageref#1[#2]#3{% + \leavevmode\unskip + \global\advance\c@vrcnt\@ne + \@ifundefined{r@\the\c@vrcnt @vr}% + {\@namedef{r@\the\c@vrcnt @vr}{{??}{??}{}{}{}}}{}% + \edef\@tempa{% + \expandafter\expandafter\expandafter + \@secondoffive\csname r@\the\c@vrcnt @vr\endcsname + }% + \@ifundefined{r@\the\c@vrcnt @xvr}% + {\@namedef{r@\the\c@vrcnt @xvr}{{??}{??}{}{}{}}}{}% + \edef\@tempb{% + \expandafter\expandafter\expandafter + \@secondoffive\csname r@\the\c@vrcnt @xvr\endcsname + }% + {% + \let\@currentlabel\@empty + \expandafter\label\expandafter{\the\c@vrcnt @xvr}% + }% + \ifx\@tempa\@tempb + \else + \vref@err{% + \noexpand\vref at page boundary % + \@tempb-\@tempa\space (may loop)% + }% + \fi + \@ifundefined{r@#3}{\@namedef{r@#3}{{??}{??}{}{}{}}}{}% + \edef\thevpagerefnum{% + \expandafter\expandafter\expandafter + \@secondoffive\csname r@#3\endcsname + }% + \ifx\vref@space\@undefined + \space + \else + \vref@space + \fi + \ifx\@tempa\thevpagerefnum + #1% + \else + #2% + \is@pos@number\thevpagerefnum{% + \is@pos@number\@tempa{% + \@tempcnta\@tempa + \advance\@tempcnta\@ne + }{% + \@tempcnta\maxdimen + }% + \ifnum \thevpagerefnum =\@tempcnta + \ifodd\@tempcnta + \if@twoside + \reftextfaceafter + \else + \reftextafter + \fi + \else + \reftextafter + \fi + \else + \advance\@tempcnta-2 % + \ifnum \thevpagerefnum =\@tempcnta + \ifodd\@tempcnta + \reftextbefore + \else + \if@twoside + \reftextfacebefore + \else + \reftextbefore + \fi + \fi + \else + \reftextfaraway{#3}% + \fi + \fi + }{% + \reftextfaraway{#3}% + }% + \fi + {% + \let\@currentlabel\@empty + \expandafter\label\expandafter{\the\c@vrcnt @vr}% + }% + }% + \DeclareRobustCommand\vnameref[1]{% + \unskip~\nameref{#1}% + \@vpageref[\unskip]{#1}% + }% + \fi +} +% \end{macrocode} +% \begin{macrocode} +\@ifundefined{@Refstar}{% + \def\T@Ref#1{% + \NR@setref{#1}\NR@MakeUppercaseFirstOfFive{#1}% + }% + \def\NR@MakeUppercaseFirstOfFive#1#2#3#4#5{% + \MakeUppercase#1% + }% +}{}% +\AtBeginDocument{% + \@ifpackageloaded{varioref}{% + \@ifundefined{@Refstar}{% + \DeclareRobustCommand*{\Ref}[1]{% + \T@Ref{#1}% + }% + }{}% + }{}% +}% +% \end{macrocode} +% +% \subsection{Support for package \xpackage{listings}} +% +% \begin{macrocode} +\AtBeginDocument{% + \@ifpackageloaded{listings}{% + \let\NROrg@lst@MakeCaption\lst@MakeCaption + \def\lst@MakeCaption{% + \ifx\lst@label\@empty + \else + \let\@currentlabelname\lst@@caption + \fi + \NROrg@lst@MakeCaption + }% + }{}% +} +% \end{macrocode} +% +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% \Finale +\endinput |