Current File : //usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty |
%%
%% This is file `nameref.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% nameref.dtx (with options: `package')
%%
%% File: nameref.dtx
%% Copyright (C) 1995-1999 Sebastian Rahtz
%% 2000 Sebastian Rahtz, Heiko Oberdiek
%% 2001-2012 Heiko Oberdiek
%% 2016-2019 Oberdiek Package Suport Group
%% 2019-2021 The LaTeX Project
%% https://github.com/latex3/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 The LaTeX Project.
%%
%% The list of all files belonging to the `Hyperref Bundle' is
%% given in the file `manifest.txt'.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{nameref}
[2021-04-02 v2.47 Cross-referencing by name of section]%
\RequirePackage{refcount}[2006/02/12]
\RequirePackage{gettitlestring}[2009/12/18]
\RequirePackage{ltxcmds}[2009/12/12]
\def\NR@strip@period#1.\ltx@empty#2\@nil{#1}
\def\strip@period#1.\relax#2\@@@{#1}
\def\NR@sanitize@labelname{%
\@onelevel@sanitize\@currentlabelname
\edef\@currentlabelname{%
\expandafter\NR@strip@period\@currentlabelname
\ltx@empty.\ltx@empty\@nil
}%
}
\newif\ifNR@showkeys
\NR@showkeysfalse
\@ifpackageloaded{showkeys}{%
\begingroup
\@ifundefined{SK@@label}{%
}{%
\global\NR@showkeystrue
}%
\endgroup
}{}
\providecommand*{\label@hook}{}
\ltx@GlobalAppendToMacro{\label@hook}{%
\NR@sanitize@labelname
}
\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
\let\ltx@label\label
\@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
}%
}
\def\@writetocindents@{%
\begingroup
\@for\@tempa:=-1,0,1,2,3\do{%
\immediate\write\@auxout{%
\string\newlabel{tocindent\@tempa}{%
\csname r@tocindent\@tempa\endcsname{}{}{}{}%
}%
}%
}%
\endgroup
}
\def\NR@gettitle#1{%
\GetTitleString{#1}%
\let\@currentlabelname\GetTitleStringResult
}
\let\NR@sect\@sect
\newcounter{section@level}
\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}}%
}
\let\NR@ssect\@ssect
\def\@ssect#1#2#3#4#5{%
\NR@gettitle{#5}%
\NR@ssect{#1}{#2}{#3}{#4}{\Sectionformat{#5}{#1}}%
}
\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}]%
}%
}%
}
\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}%
}
\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}]%
}%
}%
\@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
}%
}{}%
\ltx@IfUndefined{descriptionlabel}{%
}{%
\let\NRorg@descriptionlabel\descriptionlabel
\def\descriptionlabel#1{%
\NR@gettitle{#1}%
\NRorg@descriptionlabel{#1}%
}%
}%
}
\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}%
}%
}{}%
}
\@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}%
\addtobeamertemplate{theorem begin}{%
\expandafter\NR@gettitle\expandafter{\inserttheoremaddition}%
}{}%
\@ifdefinable{\NRorg@beamer@descriptionitem}{%
\let\NRorg@beamer@descriptionitem\beamer@descriptionitem
\renewcommand{\beamer@descriptionitem}[1]{%
\NR@gettitle{#1}%
\NRorg@beamer@descriptionitem{#1}%
}%
}%
}{}
\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
}{}%
}
\providecommand*{\@currentlabelname}{}
\providecommand*{\@currentHref}{}
\long\def\@firstoffive#1#2#3#4#5{#1}
\long\def\@secondoffive#1#2#3#4#5{#2}
\long\def\@thirdoffive#1#2#3#4#5{#3}
\long\def\@fourthoffive#1#2#3#4#5{#4}
\long\def\@fifthoffive#1#2#3#4#5{#5}
\providecommand*\@safe@activestrue{}%
\providecommand*\@safe@activesfalse{}%
\def\NR@setref#1{%
\begingroup
\@safe@activestrue
\expandafter
\endgroup
\expandafter\NR@@setref\csname r@#1\endcsname
}
\def\NR@@setref#1{%
\ifx\@undefined#1%
\let#1\relax
\fi
\@setref#1%
}
\def\T@ref#1{%
\NR@setref{#1}\@firstoffive{#1}%
}%
\def\T@pageref#1{%
\NR@setref{#1}\@secondoffive{#1}%
}%
\ifNR@showkeys
\ifx\SK@ref\@empty
\else
\def\T@ref#1{%
\@safe@activestrue
\SK@\SK@@ref{#1}%
\@safe@activesfalse
\NR@setref{#1}\@firstoffive{#1}%
}%
\def\T@pageref#1{%
\@safe@activestrue
\SK@\SK@@ref{#1}%
\@safe@activesfalse
\NR@setref{#1}\@secondoffive{#1}%
}%
\fi
\fi
\@ifpackageloaded{hyperref}{%
}{%
\DeclareRobustCommand{\ref}{\T@ref}%
\DeclareRobustCommand{\pageref}{\T@pageref}%
}
\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
\DeclareRobustCommand*{\nameref}{%
\@ifstar\T@nameref\T@nameref
}%
\def\Nameref#1{`\nameref{#1}' on page~\pageref{#1}}
\providecommand\Sectionformat[2]{#1}
\@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}}%
}%
}{}
\AtBeginDocument{%
\ifx\csname @@vpageref\endcsname\relax
\else
\ifdefined\vp@gerefstar
\let\NR@@vpageref\@@vpageref
\else
\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}%
}%
}%
\fi
\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
}%
\DeclareRobustCommand\vnameref[1]{%
\unskip~\nameref{#1}%
\@vpageref[\unskip]{#1}%
}%
\fi
}
\@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}%
}%
}{}%
}{}%
}%
\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
}%
}{}%
}
\endinput
%%
%% End of file `nameref.sty'.