diff options
author | Norbert Preining <norbert@preining.info> | 2019-11-30 03:00:45 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-11-30 03:00:45 +0000 |
commit | 763d7adeac2bc39fb895a0748f12422d5c959d4c (patch) | |
tree | eb54a7ed141f7fd10a3bbd0f8ff7d478b22f06fc /macros/latex/contrib/oberdiek/zref.dtx | |
parent | b4325b27feab3a4183f51bfe598686eb72a8c1e0 (diff) |
CTAN sync 201911300300
Diffstat (limited to 'macros/latex/contrib/oberdiek/zref.dtx')
-rw-r--r-- | macros/latex/contrib/oberdiek/zref.dtx | 6869 |
1 files changed, 0 insertions, 6869 deletions
diff --git a/macros/latex/contrib/oberdiek/zref.dtx b/macros/latex/contrib/oberdiek/zref.dtx deleted file mode 100644 index 0a8e7f0505..0000000000 --- a/macros/latex/contrib/oberdiek/zref.dtx +++ /dev/null @@ -1,6869 +0,0 @@ -% \iffalse meta-comment -% -% File: zref.dtx -% Version: 2018/11/21 v2.27 -% Info: A new reference scheme for LaTeX -% -% Copyright (C) 2006-2012 by -% Heiko Oberdiek <heiko.oberdiek at googlemail.com> -% 2016 -% https://github.com/ho-tex/oberdiek/issues -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either -% version 1.3c of this license or (at your option) any later -% version. This version of this license is in -% https://www.latex-project.org/lppl/lppl-1-3c.txt -% and the latest version of this license is in -% https://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 Maintainers of this work are -% Heiko Oberdiek and the Oberdiek Package Support Group -% https://github.com/ho-tex/oberdiek/issues -% -% This work consists of the main source file zref.dtx -% and the derived files -% zref.sty, zref.pdf, zref.ins, zref.drv, zref-base.sty, -% zref-abspage.sty, zref-abspos.sty, zref-counter.sty, -% zref-dotfill.sty, zref-env.sty, zref-hyperref.sty, -% zref-lastpage.sty, zref-marks.sty, zref-nextpage.sty, -% zref-pageattr.sty, zref-pagelayout.sty, zref-perpage.sty, -% zref-runs.sty, zref-savepos.sty, zref-thepage.sty, -% zref-titleref.sty, zref-totpages.sty, zref-user.sty, -% zref-xr.sty, zref-example.tex, zref-example-lastpage.tex, -% zref-example-nextpage.tex, zref-test1.tex, -% zref-test-base.tex, zref-test-runs.tex, -% zref-test-titleref-memoir.tex. -% -% Distribution: -% CTAN:macros/latex/contrib/oberdiek/zref.dtx -% CTAN:macros/latex/contrib/oberdiek/zref.pdf -% -% Unpacking: -% (a) If zref.ins is present: -% tex zref.ins -% (b) Without zref.ins: -% tex zref.dtx -% (c) If you insist on using LaTeX -% latex \let\install=y\input{zref.dtx} -% (quote the arguments according to the demands of your shell) -% -% Documentation: -% (a) If zref.drv is present: -% latex zref.drv -% (b) Without zref.drv: -% latex zref.dtx; ... -% The class ltxdoc loads the configuration file ltxdoc.cfg -% if available. Here you can specify further options, e.g. -% use A4 as paper format: -% \PassOptionsToClass{a4paper}{article} -% -% Programm calls to get the documentation (example): -% pdflatex zref.dtx -% makeindex -s gind.ist zref.idx -% pdflatex zref.dtx -% makeindex -s gind.ist zref.idx -% pdflatex zref.dtx -% -% Installation: -% TDS:tex/latex/oberdiek/zref.sty -% TDS:tex/latex/oberdiek/zref-base.sty -% TDS:tex/latex/oberdiek/zref-abspage.sty -% TDS:tex/latex/oberdiek/zref-abspos.sty -% TDS:tex/latex/oberdiek/zref-counter.sty -% TDS:tex/latex/oberdiek/zref-dotfill.sty -% TDS:tex/latex/oberdiek/zref-env.sty -% TDS:tex/latex/oberdiek/zref-hyperref.sty -% TDS:tex/latex/oberdiek/zref-lastpage.sty -% TDS:tex/latex/oberdiek/zref-marks.sty -% TDS:tex/latex/oberdiek/zref-nextpage.sty -% TDS:tex/latex/oberdiek/zref-pageattr.sty -% TDS:tex/latex/oberdiek/zref-pagelayout.sty -% TDS:tex/latex/oberdiek/zref-perpage.sty -% TDS:tex/latex/oberdiek/zref-runs.sty -% TDS:tex/latex/oberdiek/zref-savepos.sty -% TDS:tex/latex/oberdiek/zref-thepage.sty -% TDS:tex/latex/oberdiek/zref-titleref.sty -% TDS:tex/latex/oberdiek/zref-totpages.sty -% TDS:tex/latex/oberdiek/zref-user.sty -% TDS:tex/latex/oberdiek/zref-xr.sty -% TDS:doc/latex/oberdiek/zref.pdf -% TDS:doc/latex/oberdiek/zref-example.tex -% TDS:doc/latex/oberdiek/zref-example-lastpage.tex -% TDS:doc/latex/oberdiek/zref-example-nextpage.tex -% TDS:doc/latex/oberdiek/test/zref-test1.tex -% TDS:doc/latex/oberdiek/test/zref-test-base.tex -% TDS:doc/latex/oberdiek/test/zref-test-runs.tex -% TDS:doc/latex/oberdiek/test/zref-test-titleref-memoir.tex -% TDS:source/latex/oberdiek/zref.dtx -% -%<*ignore> -\begingroup - \catcode123=1 % - \catcode125=2 % - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase 0\ifx\install y1\fi\expandafter - \ifx\csname processbatchFile\endcsname\relax\else1\fi - \ifx\fmtname\x\else 1\fi\relax -\else\csname fi\endcsname -%</ignore> -%<*install> -\input docstrip.tex -\Msg{************************************************************************} -\Msg{* Installation} -\Msg{* Package: zref 2018/11/21 v2.27 A new reference scheme for LaTeX (HO)} -\Msg{************************************************************************} - -\keepsilent -\askforoverwritefalse - -\let\MetaPrefix\relax -\preamble - -This is a generated file. - -Project: zref -Version: 2018/11/21 v2.27 - -Copyright (C) 2006-2012 by - Heiko Oberdiek <heiko.oberdiek at googlemail.com> - -This work may be distributed and/or modified under the -conditions of the LaTeX Project Public License, either -version 1.3c of this license or (at your option) any later -version. This version of this license is in - https://www.latex-project.org/lppl/lppl-1-3c.txt -and the latest version of this license is in - https://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 Maintainers of this work are -Heiko Oberdiek and the Oberdiek Package Support Group -https://github.com/ho-tex/oberdiek/issues - - -This work consists of the main source file zref.dtx -and the derived files - zref.sty, zref.pdf, zref.ins, zref.drv, zref-base.sty, - zref-abspage.sty, zref-abspos.sty, zref-counter.sty, - zref-dotfill.sty, zref-env.sty, zref-hyperref.sty, - zref-lastpage.sty, zref-marks.sty, zref-nextpage.sty, - zref-pageattr.sty, zref-pagelayout.sty, zref-perpage.sty, - zref-runs.sty, zref-savepos.sty, zref-thepage.sty, - zref-titleref.sty, zref-totpages.sty, zref-user.sty, - zref-xr.sty, zref-example.tex, zref-example-lastpage.tex, - zref-example-nextpage.tex, zref-test1.tex, - zref-test-base.tex, zref-test-runs.tex, - zref-test-titleref-memoir.tex. - -\endpreamble -\let\MetaPrefix\DoubleperCent - -\generate{% - \file{zref.ins}{\from{zref.dtx}{install}}% - \file{zref.drv}{\from{zref.dtx}{driver}}% - \usedir{tex/latex/oberdiek}% - \file{zref.sty}{\from{zref.dtx}{package}}% - \file{zref-base.sty}{\from{zref.dtx}{base}}% - \file{zref-abspage.sty}{\from{zref.dtx}{abspage}}% - \file{zref-abspos.sty}{\from{zref.dtx}{abspos}}% - \file{zref-counter.sty}{\from{zref.dtx}{counter}}% - \file{zref-dotfill.sty}{\from{zref.dtx}{dotfill}}% - \file{zref-env.sty}{\from{zref.dtx}{env}}% - \file{zref-hyperref.sty}{\from{zref.dtx}{hyperref}}% - \file{zref-lastpage.sty}{\from{zref.dtx}{lastpage}}% - \file{zref-marks.sty}{\from{zref.dtx}{marks}}% - \file{zref-nextpage.sty}{\from{zref.dtx}{nextpage}}% - \file{zref-pageattr.sty}{\from{zref.dtx}{pageattr}}% - \file{zref-pagelayout.sty}{\from{zref.dtx}{pagelayout}}% - \file{zref-perpage.sty}{\from{zref.dtx}{perpage}}% - \file{zref-runs.sty}{\from{zref.dtx}{runs}}% - \file{zref-savepos.sty}{\from{zref.dtx}{savepos}}% - \file{zref-thepage.sty}{\from{zref.dtx}{thepage}}% - \file{zref-titleref.sty}{\from{zref.dtx}{titleref}}% - \file{zref-totpages.sty}{\from{zref.dtx}{totpages}}% - \file{zref-user.sty}{\from{zref.dtx}{user}}% - \file{zref-xr.sty}{\from{zref.dtx}{xr}}% - \usedir{doc/latex/oberdiek}% - \file{zref-example.tex}{\from{zref.dtx}{example}}% - \file{zref-example-lastpage.tex}{\from{zref.dtx}{example-lastpage}}% - \file{zref-example-nextpage.tex}{\from{zref.dtx}{example-nextpage}}% -% \usedir{doc/latex/oberdiek/test}% -% \file{zref-test1.tex}{\from{zref.dtx}{test1}}% -% \file{zref-test-base.tex}{\from{zref.dtx}{test-base}}% -% \file{zref-test-runs.tex}{\from{zref.dtx}{test-runs}}% -% \file{zref-test-titleref-memoir.tex}{\from{zref.dtx}{test-titleref-memoir}}% - \nopreamble - \nopostamble -% \usedir{source/latex/oberdiek/catalogue}% -% \file{zref.xml}{\from{zref.dtx}{catalogue}}% -} - -\catcode32=13\relax% active space -\let =\space% -\Msg{************************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move the following} -\Msg{* files into a directory searched by TeX:} -\Msg{*} -\Msg{* zref.sty, zref-base.sty, zref-abspage.sty, zref-abspos.sty,} -\Msg{* zref-counter.sty, zref-dotfill.sty, zref-env.sty,} -\Msg{* zref-hyperref.sty, zref-lastpage.sty, zref-marks.sty,} -\Msg{* zref-nextpage.sty, zref-pageattr.sty, zref-pagelayout.sty,} -\Msg{* zref-perpage.sty, zref-runs.sty, zref-savepos.sty,} -\Msg{* zref-thepage.sty, zref-titleref.sty, zref-totpages.sty,} -\Msg{* zref-user.sty, zref-xr.sty} -\Msg{*} -\Msg{* To produce the documentation run the file `zref.drv'} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing!} -\Msg{*} -\Msg{************************************************************************} - -\endbatchfile -%</install> -%<*ignore> -\fi -%</ignore> -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\ProvidesFile{zref.drv}% - [2018/11/21 v2.27 A new reference scheme for LaTeX (HO)]% -\documentclass{ltxdoc} -\usepackage{holtxdoc}[2011/11/22] -\setlength{\emergencystretch}{1em} -\begin{document} - \DocInput{zref.dtx}% -\end{document} -%</driver> -% \fi -% -% -% \CharacterTable -% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -% Digits \0\1\2\3\4\5\6\7\8\9 -% Exclamation \! Double quote \" Hash (number) \# -% Dollar \$ Percent \% Ampersand \& -% Acute accent \' Left paren \( Right paren \) -% Asterisk \* Plus \+ Comma \, -% Minus \- Point \. Solidus \/ -% Colon \: Semicolon \; Less than \< -% Equals \= Greater than \> Question mark \? -% Commercial at \@ Left bracket \[ Backslash \\ -% Right bracket \] Circumflex \^ Underscore \_ -% Grave accent \` Left brace \{ Vertical bar \| -% Right brace \} Tilde \~} -% -% \GetFileInfo{zref.drv} -% -% \title{The \xpackage{zref} package} -% \date{2018/11/21 v2.27} -% \author{Heiko Oberdiek\thanks -% {Please report any issues at \url{https://github.com/ho-tex/oberdiek/issues}}} -% -% \maketitle -% -% \begin{abstract} -% Package \xpackage{zref} tries to get rid of the restriction -% in \hologo{LaTeX}'s reference system that only two properties are -% supported. The package implements an extensible referencing -% system, where properties are handled in a more flexible way. -% It offers an interface for macro programmers for the access -% to the system and some applications that uses the new -% reference scheme. -% \end{abstract} -% -% \tableofcontents -% -% \newcommand*{\metacs}[1]{\texttt{\itshape #1}} -% -% \newcommand{\markexp}{^^A -% \textsuperscript{exp}^^A -% \space -% } -% \newcommand{\markexptwo}{^^A -% \textsuperscript{exp2}^^A -% \space -% } -% \newcommand{\markrobust}{^^A -% \textsuperscript{robust}^^A -% \space -% } -% \newcommand{\marknowarn}{^^A -% \textsuperscript{nowarn}^^A -% \space -% } -% \newcommand{\markbabel}{^^A -% \textsuperscript{babel}^^A -% \space -% } -% -% \section{Introduction} -% -% Standard \hologo{LaTeX}'s reference system with \cs{label}, \cs{ref}, -% and \cs{pageref} supports two properties, the apperance of -% the counter that is last incremented by \cs{refstepcounter} and -% the page with the \cs{label} command. -% -% Unhappily \hologo{LaTeX} does not provide an interface for adding -% another properties. Packages such as \xpackage{hyperref}, -% \xpackage{nameref}, or \xpackage{titleref} are forced to -% use ugly hacks to extend the reference system. -% These ugly hacks are one of the causes for \xpackage{hyperref}'s -% difficulty regarding compatibility with other packages. -% -% \subsection{Standard \hologo{LaTeX} behaviour} -% -% References are created by the \cs{label} command: -% \begin{quote} -% |\chapter{Second chapter}|\\ -% |\section{First section on page 7} % section 2.1|\\ -% |\label{myref}| -% \end{quote} -% Now \hologo{LaTeX} records the section number |2.1| and the page |7| -% in the reference. Internally the reference is a list with -% two entries: -% \begin{quote} -% |\r@myref| $\rightarrow$ |{2.1}{7}| -% \end{quote} -% The length of the list if fixed in the \hologo{LaTeX} kernel, -% An interface for adding new properties is missing. -% -% There are several tries to add new properties: -% \begin{description} -% \item[\xpackage{hyperref}] uses a list of five -% properties instead of the standard list with two entries. -% This causes many compatibility problems with \hologo{LaTeX} and -% other packages. -% \item[\xpackage{titleref}] stores its title data into the -% first entry in the list. \hologo{LaTeX} is happy because it -% does only see its list with two entries. The situation -% becomes more difficult, if more properties are added -% this way. Then the macros form a nested structure -% inside the first reference argument for the label. -% Expandable extractions will then become painful. -% \end{description} -% -% \subsection{Basic idea} -% -% Some time ago Morten H\o gholm sent me an experimental -% cross referencing mechanism as ``expl3'' code. His -% idea is: -% \begin{quote} -% |\g_xref_mylabel_plist| $\rightarrow$\\ -% \mbox{}\qquad|\xref_dance_key{salsa}\xref_name_key{Morten}|\dots -% \end{quote} -% The entries have the following format: -% \begin{quote} -% |\xref_|\meta{your key}|_key{|\meta{some text}|}| -% \end{quote} -% This approach is much more flexible: -% \begin{itemize} -% \item New properties can easily be added, just use a new key. -% \item The length of the list is not fixed. A reference -% can use a subset of the keys. -% \item The order of the entries does not matter. -% \end{itemize} -% Unhappily I am not familiar with the experimental code -% for \hologo{LaTeX3} that will need some time before its first release. -% Thus I have implemented it as \hologo{LaTeXe} package without disturbing -% the existing \hologo{LaTeX} reference system. -% -% \subsection{Interfaces} -% -% The package provides a generic \emph{interface for programmers}. -% Commands of this interface are prefixed by \cs{zref@}. -% -% Option \xoption{user} enabels the \emph{user interface}. -% Here the commands are prefixed by \cs{z} to avoid name -% clashes with existing macros. -% -% Then the packages provides some \emph{modules}. They -% are applications for the reference system and can also be -% considered as examples how to use the reference system. -% -% The modules can be loaded as packages. The package -% name is prefixed with |zref-|, for example: -%\begin{quote} -%\begin{verbatim} -%\RequirePackage{zref-abspage} -%\end{verbatim} -%\end{quote} -% This is the preferred way if the package is loaded from -% within other packages to avoid option clashes. -% -% As alternative package |zref| can be used and the modules -% are given as options: -%\begin{quote} -%\begin{verbatim} -%\usepackage[perpage,user]{zref} -%\end{verbatim} -%\end{quote} -% -% \section{Interface for programmers} -% -% The user interface is described in the next section \ref{sec:user}. -% -% \subsection{Entities} -% -% \paragraph{Reference.} -% Internally a reference is a list of key value pairs: -% \begin{quote} -% |\Z@R@myref| $\rightarrow$ -% |\default{2.1}\page{7}| -% \end{quote} -% The generic format of a entry is: -% \begin{quote} -% |\Z@R@|\meta{refname} $\rightarrow$ -% |\|\meta{propname}|{|\meta{value}|}| -% \end{quote} -% \meta{refname} is the name that denoted references -% (the name used in \cs{label} and \cs{ref}). \meta{propname} -% is the name of the property or key. The property key macro -% is never executed, it is used in parameter text matching only. -% -% \paragraph{Property.} -% Because the name of a property is used in a macro name -% that must survive the \xfile{.aux} file, the name is -% restricted to letters and `@'. -% -% \paragraph{Property list.} -% Often references are used for special purposes. Thus it -% saves memory if just the properties are used in this -% reference that are necessary for its purpose. -% -% Therefore this package uses the concept of \emph{property lists}. -% A property list is a set of properties. The set of properties -% that is used by the default \cs{label} command is the -% \emph{main property list}. -% -% \subsection{Property list} -% -% \markexp means that the implementation of the -% marked macro is expandable. \markexptwo goes a step further -% and marks the macro expandable in exact two expansion steps. -% -% \begin{declcs}{zref@newlist} -% \M{listname} -% \end{declcs} -% Declares a new empty property list. -% -% \begin{declcs}{zref@addprop} -% \M{listname} \M{propname}\\ -% \cs{zref@localaddprop} \M{listname} \M{propname} -% \end{declcs} -% Adds the property \meta{propname} -% to the property list \meta{listname}. -% The property and list must exist. -% The addition is global by \cs{zref@addprop} and limited to -% local scope by \cs{zref@localaddprop}. -% Between 2010/04/19 v2.13 and 2010/10/22 v2.19 a comma separated list -% of properties could be used as argument \meta{propname}. -% Since 2010/10/22 v2.19 the addition of several properties -% at once is supported by \cs{zref@addprops}. -% -% \begin{declcs}{zref@addprops} -% \M{listname} \M{propname list}\\ -% \cs{zref@localaddprops} \M{listname} \M{propname list} -% \end{declcs} -% These macros add a comma separated list of properties -% \meta{propname list} to list \meta{listname}. -% \cs{zref@addprops} works globally and \cs{zref@localaddprops} -% locally. Since 2010/10/22 v2.19. -% -% \begin{declcs}{zref@listexists} -% \M{listname} \M{then} -% \end{declcs} -% Executes \meta{then} if the property list \meta{listname} exists -% or raise an error otherwise. -% -% \begin{declcs}{zref@iflistundefined}\markexp \M{listname} -% \M{then} \M{else} -% \end{declcs} -% Executes \meta{then} if the list exists or \meta{else} -% otherwise. -% -% \begin{declcs}{zref@iflistcontainsprop} -% \M{listname} \M{propname} \M{then} \M{else} -% \end{declcs} -% Executes \meta{then} if the property \meta{propname} is part -% of property list \meta{listname} or otherwise it -% runs the \meta{else} part. -% -% \subsection{Property} -% -% \begin{declcs}{zref@newprop} -% \* \M{propname} |[|\meta{default}|]| \M{value} -% \end{declcs} -% This command declares and configures a new property with -% name \meta{propname}. -% -% In case of unknown references -% or the property does not exist in the reference, the -% \meta{default} is used as value. If it is not specified -% here, a global default is used, see \cs{zref@setdefault}. -% -% The correct values of some properties are not known -% immediately but at page shipout time. Prominent example -% is the page number. These properties are declared with -% the star form of the command. -% -% \begin{declcs}{zref@setcurrent} -% \M{propname} \M{value} -% \end{declcs} -% This sets the current value of the property \meta{propname}. -% It is a generalization of setting \hologo{LaTeX}'s \cs{currentlabel}. -% -% \begin{declcs}{zref@getcurrent}\markexptwo -% \M{propname} -% \end{declcs} -% This returns the current value of the property \meta{propname}. -% The value may not be correct, especially if the property -% is bound to a page (start form of \cs{zref@newprop}) and the -% right value is only known at shipout time (e.g. property `page'). -% In case of errors (e.g. unknown property) the empty string is -% returned. -% -% Since version 2010/04/22 v2.14 \cs{zref@getcurrent} supports -% \cs{zref@wrapper@unexpanded}. -% -% \begin{declcs}{zref@propexists} -% \M{propname} \M{then} -% \end{declcs} -% Calls \meta{then} if the property \meta{propname} is available -% or generates an error message otherwise. -% -% \begin{declcs}{zref@ifpropundefined}\markexp -% \M{propname} \M{then} \M{else} -% \end{declcs} -% Calls \meta{then} or \meta{else} depending on the existence -% of property \meta{propname}. -% -% \subsection{Reference generation} -% -% \begin{declcs}{zref@label} -% \M{refname} -% \end{declcs} -% This works similar to \cs{label}. The reference \meta{refname} is -% created and put into the \xfile{.aux} file with the -% properties of the main property list. -% -% \begin{declcs}{zref@labelbylist} -% \M{refname} \M{listname} -% \end{declcs} -% Same as \cs{zref@label} except that the properties are -% taken from the specified property list \meta{listname}. -% -% \begin{declcs}{zref@labelbyprops} -% \M{refname} |{|\meta{propnameA}|,|\meta{propnameB}|,|\dots|}| -% \end{declcs} -% Same as \cs{zref@label} except that these properties -% are used that are given as comma separated list in the -% second argument. -% -% \begin{declcs}{zref@newlabel} -% \M{refname} |{|\dots|}| -% \end{declcs} -% This is the macro that is used in the \xfile{.aux} file. -% It is basically the same as \cs{newlabel} apart from -% the format of the data in the second argument. -% -% \subsection{Data extraction} -% -% \begin{declcs}{zref@extractdefault}\markexptwo -% \M{refname} \M{propname} \M{default} -% \end{declcs} -% This is the basic command that refernces the value of a -% property \meta{propname} for the reference \meta{refname}. -% In case of errors such as undefined reference the \meta{default} -% is used instead. -% -% \begin{declcs}{zref@extract}\markexptwo -% \M{refname} \M{propname} -% \end{declcs} -% The command is an abbreviation for \cs{zref@extractdefault}. -% As default the default of the property is taken, otherwise -% the global default. -% -% Example for page references: -% \begin{quote} -% \begin{tabular}{@{}ll} -% \hologo{LaTeX}:& |\pageref{foobar}|\\ -% \xpackage{zref}:& |\zref@extract{foobar}{page}| -% \end{tabular} -% \end{quote} -% Both \cs{zref@extract} and \cs{zref@extractdefault} are -% expandable. That means, these macros can directly -% be used in expandable calculations, see the example file. -% On the other side, babel's shorthands are not supported, -% there are no warnings in case of undefined references. -% -% If an user interface doesn't need expandable macros -% then it can use \cs{zref@refused} and \cs{zref@wrapper@babel} -% for its user macros. -% -% \begin{declcs}{zref@refused} -% \M{refname} -% \end{declcs} -% This command is not expandable. It causes the warnings if -% the reference \meta{refname} is not defined. Use the -% \cs{zref@extract} commands inside expandable contexts and -% mark their use outside by \cs{zref@refused}, see the example -% file. -% -% \begin{declcs}{zref@def@extract}% -% \M{cmd} \M{refname} \M{propname}\\ -% \cs{zref@def@extractdefault} -% \M{cmd} \M{refname} \M{propname} \M{default} -% \end{declcs} -% Both macros extract the property \meta{propname} from the reference -% \meta{refname} the same way as macros \cs{zref@extract} and -% \cs{zref@extractdefault}. The result is stored in macro \meta{cmd}. -% Also \cs{zref@refused} is called to notify \hologo{LaTeX} that -% the reference \meta{refname} is used. Added in 2011/10/04 v2.22. -% -% \begin{declcs}{zref@ifrefundefined}\markexp -% \M{refname} \M{then} \M{else} -% \end{declcs} -% Macro \cs{zref@ifrefundefined} calls arguments \meta{then} or \meta{else} -% dependent on the existence of the reference \meta{refname}. -% -% \begin{declcs}{zifrefundefined} -% \M{refname} \M{then} \M{else} -% \end{declcs} -% Macro \cs{zifrefundefined} calls \cs{ref@refused} before -% executing \cs{zref@ifrefundefined}. Babel shorthands are -% supported in \meta{refname}. -% -% \begin{declcs}{zref@ifrefcontainsprop}\markexp -% \M{refname} \M{propname} \M{then} \M{else} -% \end{declcs} -% Test whether a reference provides a property. -% -% \subsection{Setup} -% -% \begin{declcs}{zref@default} -% \end{declcs} -% Holds the global default for unknown values. -% -% \begin{declcs}{zref@setdefault} -% |{|\meta{value}|}| -% \end{declcs} -% Sets the global default for unknown values. -% The global default is used, if a property does not specify -% an own default and the value for a property -% cannot be extracted. This can happen if the reference is -% unknown or the reference does not have the property. -% -% \begin{declcs}{zref@setmainlist} -% |{|\meta{value}|}| -% \end{declcs} -% Sets the name of the main property list. The package -% sets and uses |main|. -% -% \subsection{Declared properties} -% -% \begin{quote} -% \renewcommand*{\arraystretch}{1.05} -% \setlength{\tabcolsep}{2\tabcolsep} -% \def\VV{\vphantom{\large \"Ag}} -% \def\EMPTY{{\itshape\textless empty\textgreater}} -% \def\pl#1{&thepage&\cs{number}\cs{#1}} -% \begin{tabular}{@{}>{\sffamily}l|>{\ttfamily}l|>{\ttfamily}l|>{\ttfamily}l@{}} -% \rmfamily Module& -% \rmfamily Property& -% \rmfamily Property list& -% \rmfamily Default\\ -% \hline -% (base) -% & default & main & \EMPTY\\ -% & page & main & \EMPTY\\ -% \hline -% abspage -% & abspage & main & 0\\ -% \hline -% counter -% & counter & main & \EMPTY\\ -% \hline -% hyperref -% & anchor & main & \EMPTY\\ -% & url & & \EMPTY\\ -% \hline -% pageattr -% & pdfpageattr & thepage & \dots\\ -% & pdfpagesattr & LastPage & \dots\\ -% \hline -% pagelayout\footnotemark -% \pl{mag}\\ -% \pl{paperwidth}\\ -% \pl{paperheight}\\ -% \pl{stockwidth}\\ -% \pl{stockheight}\\ -% \pl{pdfpageheight}\\ -% \pl{pdfpagewidth}\\ -% \pl{pdfhorigin}\\ -% \pl{pdfvorigin}\\ -% \pl{hoffset}\\ -% \pl{voffset}\\ -% \pl{topmargin}\\ -% \pl{oddsidemargin}\\ -% \pl{evensidemargin}\\ -% \pl{textwidth}\\ -% \pl{textheight}\\ -% \pl{headheight}\\ -% \pl{headsep}\\ -% \pl{footskip}\\ -% \pl{marginparwidth}\\ -% \pl{marginparsep}\\ -% \pl{columnwidth}\\ -% \pl{columnsep}\\ -% \hline -% perpage -% & pagevalue & perpage & 0\\ -% & page & perpage & \EMPTY\\ -% & abspage & perpage & 0\\ -% \hline -% savepos -% & posx & savepos & 0\\ -% & posy & savepos & 0\\ -% \hline -% titleref -% & title & main & \EMPTY\\ -% \hline -% xr -% & anchor & & \EMPTY\\ -% & externaldocument & & \EMPTY\\ -% & theotype & & \EMPTY\\ -% & title & & \EMPTY\\ -% & url & & \EMPTY\\ -% \end{tabular} -% \footnotetext{Module \xmodule{pagelayout} only defines properties -% if the parameter exists.}% -% \end{quote} -% -% \subsection{Wrapper for advanced situations} -% -% \begin{declcs}{zref@wrapper@babel} -% |{|\dots|}| \M{name} -% \end{declcs} -% This macro helps to add shorthand support. The second -% argument is protected, then the code of the first argument -% is called with the protected name appended. Examples -% are in the sources. -% -% \begin{declcs}{zref@wrapper@immediate} -% |{|\dots|}| -% \end{declcs} -% There are situations where a label must be written instantly -% to the \xfile{.aux} file, for example after the last page. -% If the \cs{zlabel} or \cs{label} command is put inside this wrapper, -% immediate writing is enabled. See the implementation for -% module \xmodule{lastpage} for an example of its use. -% -% \begin{declcs}{zref@wrapper@unexpanded} -% |{|\dots|}| -% \end{declcs} -% Assuming someone wants to extract a value for property |bar| -% and store the result in a macro |\foo| without traces of -% the expanding macros and without expanding the value. -% This (theoretical?) problem can be solved by this wrapper: -% \begin{quote} -%\begin{verbatim} -%\zref@wrapper@unexpanded{% -% \edef\foo{% -% \zref@extract{someref}{bar}% -% }% -%} -%\end{verbatim} -% \end{quote} -% The \cs{edef} forces the expansion of \cs{zref@extract}, -% but the extraction of the value is prevented by -% the wrapper that uses \hologo{eTeX}'\ \cs{unexpanded} for this -% purpose. Supported macros are \cs{zref@extract}, \cs{zref@extractdefault} -% and since version 2010/04/22 v2.14 macro \cs{zref@getcurrent}. -% -% \subsection{Counter for unique names} -% -% Some modules (\xmodule{titleref} and \xmodule{dotfillmin}) -% need unique names for automatically generated label names. -% -% \begin{declcs}{zref@require@unique} -% \end{declcs} -% This command creates the unique counter |zref@unique| if the -% counter does not already exist. -% -% \begin{declcs}{thezref@unique} -% \end{declcs} -% This command is used to generate unique label names. -% -% \section{User interface}\label{sec:user} -% -% \subsection{Module \xmodule{user}} -% -% The user interface for this package and its modules -% is enabled by \xpackage{zref}'s package option \xmodule{user} -% or package \xpackage{zref-user}. -% The names of user commands are prefixed by |z| in order -% to avoid name clashes with existing macros of the same -% functionality. Thus the package does not disturb the -% traditional reference scheme, both can be used together. -% -% The syntax descriptions contain the following markers -% that are intended as hints for programmers: -% \begin{quote} -% \begin{tabular}{@{}ll@{}} -% \markbabel\unskip & Babel shorthands are allowed.\\ -% \markrobust\unskip & Robust macro.\\ -% \markexp\unskip & Expandable version:\\ -% & \textbullet\ robust, -% unless the extracted values are fragile,\\ -% & \textbullet\ no babel shorthand suport.\\ -% \markexptwo\unskip & Expandable like \markexp and:\\ -% & \textbullet\ expandable in exact two steps.\\ -% \end{tabular} -% \end{quote} -% -% The basic user interface of the package without modules -% are commands that mimic the standard \hologo{LaTeX} behaviour -% of \cs{label}, \cs{ref}, and \cs{pageref}: -% -% \begin{declcs}{zlabel} -% \M{refname}\markbabel -% \end{declcs} -% Similar to \cs{label}. It generates a label with name -% \meta{refname} in the new reference scheme. -% -% \begin{declcs}{zref} -% |[|\meta{propname}|]| \M{refname}\markbabel -% \end{declcs} -% Without optional argument similar to \cs{ref}, it returns -% the default reference property. This property is named -% |default|: -% \[ -% |\zref{|x|}| \equiv |\zref[default]{|x|}| -% \] -% -% \begin{declcs}{zpageref} -% \M{refname}\markbabel -% \end{declcs} -% Convenience macro, similar to \cs{pageref}. -% \[ -% |\zpageref{|x|}| \equiv |\zref[page]{|x|}| -% \] -% -% \begin{declcs}{zrefused} -% \M{refname}\markbabel -% \end{declcs} -% Some of the user commands in the modules are expandable. -% The use of such commands do not cause any undefined -% reference warnings, because inside of expandable -% contexts this is not possible. However, if there is -% a place outside of expandable contexts, \cs{refused} -% is strongly recommended. The reference \meta{refname} -% is marked as used, undefined ones will generate -% warnings. -% -% \subsection{Module \xmodule{abspage}} -% -% With the help of package \xpackage{atbegshi} -% a new counter |abspage| with absolute page numbers is provided. -% Also a new property |abspage| is defined and added to the -% main property list. Thus you can reference the absolute -% page number: -% \begin{quote} -% |Section \zref{foo} is on page \zpageref{foo}.|\\ -% |This is page \zref[abspage]{foo}|\\ -% |of \zref[abspage]{LastPage}.| -% \end{quote} -% The example also makes use of module \xmodule{lastpage}. -% -% \subsection{Module \xmodule{lastpage}} -% -% Provides the functionality of package \xpackage{lastpage} -% \cite{lastpage} in the new reference scheme. -% The label |LastPage| is put at the end of the document. -% You can refer the last page number with: -% \begin{quote} -% |\zref@extract{LastPage}{page}| (+ |\zref@refused{LastPage}|)\\ -% \end{quote} -% or -% \begin{quote} -% |\zpageref{LastPage}| (module \xmodule{user}) -% \end{quote} -% -% Since version 2008/10/01 v2.3 the module defines the list |LastPage|. -% In addition to the properties of the main list label |LastPage| also -% stores the properties of this list |LastPage|. The default of this -% list is empty. The list can be used by the user to add additional -% properties for label |LastPage|. -% -% \subsubsection{Tests for last page} -% -% Since version 2010/03/26 v2.8 the macros \cs{zref@iflastpage} -% and \cs{ziflastpage} were added. They test the reference, -% whether it is a reference of the last page. -% -% \begin{declcs}{zref@iflastpage}\markexp \M{refname} \M{then} \M{else} -% \end{declcs} -% Macro \cs{zref@iflastpage} compares the references \meta{refname} -% with \meta{LastPage}. Basis of the comparison is the value of -% property |abspage|, because the values are different for different -% pages. This is not ensured by property |page|. Therefore module -% \xmodule{abspage} is loaded by module \xmodule{lastpage}. -% If both values of property |abspage| are present and match, -% then \meta{then} is executed, otherwise code \meta{else} is called. -% If one or both references are undefined or lack the property |abspage|, -% then \meta{else} is executed. -% -% Macro \cs{zref@iflastpage} is expandable, therefore \cs{zref@refused} -% should be called on \meta{refname} and \meta{LastPage}. -% -% \begin{declcs}{ziflastpage} \M{refname} \M{then} \M{else} -% \end{declcs} -% Macro \cs{ziflastpage} has the same function as \cs{zref@iflastpage}, -% but adds support for babel shorthands in \meta{refname} and -% calls \cs{zref@refused}. However macro \cs{ziflastpage} is not -% expandable. -% -% \subsubsection{Example} -% -% \begin{macrocode} -%<*example-lastpage> -%<<END_EXAMPLE -\NeedsTeXFormat{LaTeX2e} -\documentclass{report} - -\newcounter{foo} -\renewcommand*{\thefoo}{\Alph{foo}} - -\usepackage{zref-lastpage,zref-user}[2018/11/21] - -\makeatletter -\zref@newprop{thefoo}{\thefoo} -\zref@newprop{valuefoo}{\the\value{foo}} -\zref@newprop{chapter}{\thechapter} -\zref@addprops{LastPage}{thefoo,valuefoo,chapter} -\makeatother - -\newcommand*{\foo}{% - \stepcounter{foo}% - [Current foo: \thefoo]% -} - -\begin{document} - \chapter{First chapter} - Last page is \zref{LastPage}.\\ - Last chapter is \zref[chapter]{LastPage}.\\ - Last foo is \zref[thefoo]{LastPage}.\\ - Last value of foo is \zref[valuefoo]{LastPage}.\\ - \foo - \chapter{Second chapter} - \foo\foo\foo - \chapter{Last chapter} - \foo -\end{document} -%END_EXAMPLE -%</example-lastpage> -% \end{macrocode} -% -% \subsection{Module \xmodule{thepage}} -% -% This module \xmodule{thepage} loads module \xmodule{abspage}, -% constructs a reference name using the absolute page number -% and remembers property |page|. Other properties can be added -% by adding them to the property list |thepage|. -% -% \begin{declcs}{zthepage} \M{absolute page number}\\ -% \end{declcs} -% Macro \cs{zthepage} is basically a \cs{zpageref}. The reference -% name is yield by the \meta{absolute page number}. If the reference -% is not defined, then the default for property |page| is used. -% -% \begin{declcs}{zref@thepage@name}\markexp \M{absolute page number} -% \end{declcs} -% Macro \cs{zref@thepage@name} returns the internal reference -% name that is constructed using the \meta{absolute page number}. -% The internal reference name should not be used directly, because -% it might change in future versions. -% -% \begin{declcs}{zref@thepage}\markexp \M{absolute page number}\\ -% \cs{zref@thepage@refused} \M{absolute page number} -% \end{declcs} -% Macro \cs{zref@thepage} returns the page number (\cs{thepage}) -% of \meta{absolute page number}. Because this macro is expandable, -% \cs{zref@thepage@refused} is used outside an expandable context -% to mark the reference as used. -% -% -% \subsection{Module \xmodule{nextpage}} -% -% \begin{declcs}{znextpage} -% \end{declcs} -% Macro \cs{znextpage} prints \cs{thepage} of the following page. -% It gets the current absolute page number by using a label. -% There are three cases for the next page: -% \begin{enumerate} -% \item The next page is not known yet because of undefined references. -% Then \cs{zunknownnextpagename} is used instead. The default for -% this macro is the default of property |page|. -% \item This page is the last page. Then \cs{znonextpagename} -% is used. Its default is empty. -% \item The next page is known, then \cs{thepage} of the next -% page is used (the value of property |page| of the next page). -% \end{enumerate} -% -% \subsubsection{Configuration} -% -% The behaviour can be configured by the following macros. -% -% \begin{declcs}{zunknownnextpagename}\\ -% \cs{znonextpagename} -% \end{declcs} -% If the next page is not known or available, then -% \cs{znextpage} uses these name macros as default. -% \cs{zunknownnextpagename} is used in case of undefined -% references. Default is the value of property |page| of the -% next page (\cs{thepage}). Module \xmodule{thepage} is used. -% -% Macro \cs{znonextpagename} is used, if the next page does -% not exists. That means that the current page is last page. -% The default is empty. -% -% \begin{declcs}{znextpagesetup} \M{unknown} \M{no next} -% \M{next} -% \end{declcs} -% Acording to the case (see \cs{znextpage}) macro \cs{znextpage} -% calls an internal macro with an argument. The argument is -% either \cs{thepage} of the next page or one of \cs{zunknownnextpagename} -% or \cs{znonextpagename}. These internal macro can be changed by -% \cs{znextpagesetup}. It expects the definition texts for these -% three cases of a macro with one argument. -% The default is -% \begin{quote} -% |\znextpagesetup{#1}{#1}{#1}| -% \end{quote} -% -% \subsubsection{Example} -% -% \begin{macrocode} -%<*example-nextpage> -%<<END_EXAMPLE -\documentclass{book} - -\usepackage{zref-nextpage}[2018/11/21] -\znextpagesetup - {\thepage}% next page is unknown - {\thepage\ (#1)}% this page is last page - {\thepage\ $\rightarrow$ #1}% next page is known -\renewcommand*{\znonextpagename}{last page} - -\usepackage{fancyhdr} -\pagestyle{fancy} -\fancyhf{} -\fancyhead[LE,RO]{\znextpage} -\fancypagestyle{plain}{% - \fancyhf{}% - \fancyhead[LE,RO]{\znextpage}% -} - -\begin{document} -\frontmatter - \tableofcontents -\mainmatter - \chapter{Hello World} - \clearpage - \section{Last section} -\end{document} -%END_EXAMPLE -%</example-nextpage> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{totpages}} -% -% For the total number of pages of a document you need to -% know the absolute page number of the last page. -% Both modules \xmodule{abspage} and \xmodule{lastpage} -% are necessary and automatically enabled. -% -% \begin{declcs}{ztotpages}\markexp -% \end{declcs} -% Prints the total number of pages or |0| if this -% number is not yet known. It expands to an explicit number -% and can also used even in expandable calculations (\cs{numexpr}) -% or counter assignments. -% -% \subsection{Module \xmodule{pagelayout}} -% -% The module defines additional properties for each parameter -% of the page layout that is effective during page shipout. -% The value of length parameters is given in sp without the -% unit as plain number. -% -% Some parameters are specific for a class (e.g.\@ \xoption{stockwidth} -% and \xoption{stockheight} for class \xclass{memoir}) or the -% \hologo{TeX} engine like \hologo{pdfTeX}. If the parameter is not -% available, then the property will not be defined. The default value -% of the property is the current setting of the parameter. -% -% The module \xmodule{thepage} is loaded that generates a label -% for each page. The properties of module \xmodule{pagelayout} -% are added to the property list |thepage| of module \xmodule{thepage}. -% -% List of properties: -% \begin{quote} -% \def\x#1{\cs{#1}}% -% \begin{tabular}{l>{\sffamily}ll} -% \textrm{parameter} & \textrm{property} & remarks\\ -% \hline -% \x{mag}\\ -% \x{paperwidth}\\ -% \x{paperheight}\\ -% \x{stockwidth}& class \xclass{memoir}\\ -% \x{stockheight}& class \xclass{memoir}\\ -% \x{pdfpagewidth}& \hologo{pdfTeX}, \hologo{LuaTeX}\\ -% \x{pdfpageheight}& \hologo{pdfTeX}, \hologo{LuaTeX}\\ -% \x{pdfhorigin}& \hologo{pdfTeX}, \hologo{LuaTeX}\\ -% \x{pdfvorigin}& \hologo{pdfTeX}, \hologo{LuaTeX}\\ -% \x{hoffset}\\ -% \x{voffset}\\ -% \x{topmargin}\\ -% \x{oddsidemargin}\\ -% \x{evensidemargin}\\ -% \x{textwidth}\\ -% \x{textheight}\\ -% \x{headheight}\\ -% \x{headsep}\\ -% \x{footskip}\\ -% \x{marginparwidth}\\ -% \x{marginparsep}\\ -% \x{columnwidth}\\ -% \x{columnsep}\\ -% \end{tabular} -% \end{quote} -% -% \begin{declcs}{zlistpagelayout} -% \end{declcs} -% At the end of document the page layout parameter for each page are -% printed into the \xext{log} file if macro \cs{zlistpagelayout} -% is called before |\end{document}| (preamble is a good place). -% -% \subsection{Module \xmodule{marks}} -% -% ToDo. -% -% \subsection{Module \xmodule{runs}} -% -% Module \xmodule{runs} counts the \hologo{LaTeX} runs since last -% \xext{aux} file creation and prints the number in the -% \xext{log} file. -% -% \begin{declcs}{zruns}\markexp -% \end{declcs} -% Prints the the total number of \hologo{LaTeX} runs including -% the current one. It expands to an explicit number. -% Before |begin{document}| the value is zero meaning -% the \xext{aux} file is not read yet. If a previous -% \xext{aux} file exists, the value found there increased -% by one is the new number. Otherwise \cs{zruns} is set to one. -% \hologo{LaTeX}~runs where the \xext{aux} files are not rewritten -% are not counted (see \cs{nofiles}). -% -% \subsection{Module \xmodule{perpage}} -% -% With \cs{@addtoreset} or \cs{numberwithin} a counter can be -% reset if another counter is incremented. This do not work -% well if the other counter is the page counter. The page counter is -% incremented in the output routine that is often called asynchronous -% somewhere on the next page. A reference mechanism costs at least -% two \hologo{LaTeX} runs, but ensures correct page counter values. -% -% \begin{declcs}{zmakeperpage} -% |[|\meta{reset}|]| \M{counter} -% \end{declcs} -% At the of a new page counter \meta{counter} starts -% counting with value \meta{reset} (default is \texttt{1}). -% The macro has the same -% syntax and semantics as \cs{MakePerPage} of package -% \xpackage{perpage} \cite{perpage}. -% Also \xoption{perpage} of package \xpackage{footmisc} \cite{footmisc} -% can easily be simulated by -% \begin{quote} -% |\zmakeperpage{footnote}| \itshape |% \usepackage[perpage]{footmisc}| -%\end{quote} -% If footnote symbols are used, some people dislike the -% first symbol \ensuremath{\dagger}. It can easily be skipped: -% \begin{quote} -% |\zmakeperpage[2]{footnote}| -% \end{quote} -% -% \begin{declcs}{thezpage}\\ -% counter |zpage| -% \end{declcs} -% If the formatted counter value of the counter that is reset at -% a new page contains the page value, then you can use \cs{thezpage}, -% the page number of the current page. Or counter |zpage| can be -% used, if the page number should be formatted differently from -% the current page number. Example: -%\begin{quote} -%\begin{verbatim} -%\newcounter{foobar} -%\zmakeperpage{foobar} -%\renewcommand*{\thefoobar}{\thezpage-\arabic{foobar}} -% % or -%\renewcommand*{\thefoobar}{\roman{zpage}-\arabic{foobar}} -%\end{verbatim} -%\end{quote} -% -% \begin{declcs}{zunmakeperpage} -% \M{counter} -% \end{declcs} -% The reset mechanism for this counter is deactivated. -% -% -% \subsection{Module \xmodule{counter}} -% -% This option just add the property |counter| to the main -% property list. The property stores the counter name, -% that was responsible for the reference. This is the -% property \xpackage{hyperref}'s \cs{autoref} feature -% uses. Thus this property |counter| may be useful -% for a reimplementation of the autoref feature, -% see the section \ref{sec:todo} with the todo list. -% -% \subsection{Module \xmodule{titleref}} -% -% This option makes section and caption titles available -% to the reference system similar to packages \xpackage{titleref} -% or \xpackage{nameref}. -% -% \begin{declcs}{ztitleref} -% \M{refname}\markbabel -% \end{declcs} -% Print the section or caption title of reference \meta{refname}, -% similar to \cs{nameref} or \cs{titleref}. -% -% \begin{declcs}{ztitlerefsetup} -% |{|\textit{key$_1$=value$_1$, key$_2$=value$_2$, \dots}|}| -% \end{declcs} -% This command allows to configure the behaviour of module -% \xmodule{titleref}. The following keys are available: -% \begin{description} -% \let\bfseries\relax -% \item[\texttt{title=}\meta{value}]\mbox{}\\* -% Sets the current title. -% \item[\texttt{stripperiod=true\string|false}]\mbox{}\\* -% Follow package \xpackage{nameref} that -% removes a last period. Default: |true|. -% \item[\texttt{expand=true\string|false}]\mbox{}\\* -% Package \cs{titleref} expands the title first. This way -% garbage and dangerous commands can be removed, e.g. -% \cs{label}, \cs{index}\dots. See implementation section -% for more details. Default is |false|. -% \item[\texttt{cleanup=\{}\textrm{\dots}\texttt{\}}]\mbox{}\\* -% Hook to add own cleanup code, if method |expand| is used. -% See implementation section for more details. -% \end{description} -% -% \subsection{Module \xmodule{savepos}} -% -% This option supports a feature that \pdfTeX\ provides -% (and \hologo{XeTeX}). -% \pdfTeX\ is able to tell the current position on the -% page. The page position is not instantly known. First the -% page must be constructed by \hologo{TeX}'s asynchronous output -% routine. Thus the time where the position is known is -% the page shipout time. Thus a reference system where the -% information is recorded in the first run and made available -% for use in the second run comes in handy. -% -% \begin{declcs}{zsavepos} -% \M{refname} -% \end{declcs} -% It generates a reference with name \meta{refname}. -% The reference stores the location where \cs{zsavepos} -% is executed in properties |posx| and |posy|. -% -% \begin{declcs}{zsaveposx} -% \M{refname}\\ -% \cs{zsaveposy} -% \M{refname} -% \end{declcs} -% Same as \cs{zsavepos} except that only the |x| or |y| component -% of the position is stored. Since 2011/12/05 v2.23. -% -% \begin{declcs}{zposx}\markexp -% \M{refname}\\ -% \SpecialUsageIndex{\zposy}\cs{zposy}\markexp \M{refname} -% \end{declcs} -% Get the position as number. Unit is sp. Horizontal -% positions by \cs{zposx} increase from left to right. -% Vertical positions by \cs{zposy} from bottom to top. -% -% Do not rely on absolute page numbers. Because of problems -% with the origin the numbers may differ in DVI or PDF mode -% of \pdfTeX. Therefore work with relative values by comparisons. -% -% Both \cs{zposx} and \cs{zposy} are expandable and can be -% used inside calculations (\cs{setcounter}, \cs{addtocounter}, -% package \xpackage{calc}, \cs{numexpr}). However this property -% prevents from notifying \hologo{LaTeX} that the reference is actually -% used (the notifying is not expandable). Therefore you should -% mark the reference as used by \cs{zrefused}. -% -% This module uses \pdfTeX's \cs{pdfsavepos}, \cs{pdflastxpos}, -% and \cs{pdflastypos}. They are available in PDF mode and -% since version 1.40.0 also in DVI mode. -% -% \begin{declcs}{zref@savepos} -% \end{declcs} -% Macro \cs{zref@savepos} performs the first part of \cs{zsavepos} -% by calling \cs{pdfsavepos} (if \xext{aux} files are writable). -% -% Thus \cs{zsavepos} is basically \cs{zref@savepos} followed -% by |\zref@labelbylist{|\texttt{\meta{refname}}|}{savepos}|. -% If \cs{TeXXeTstate} is detected and enabled, \cs{savepos} -% also adds \cs{zref@savepos} at the end to support \cs{beginR} -% where the whatits are processed in reverse order. -% The property list |savepos| contains the properties |posx| -% and |posy|. -% -% \subsection{Module \xmodule{dotfill}} -% -% \begin{declcs}{zdotfill} -% \end{declcs} -% This package provides the command \cs{zdotfill} that works -% similar to \cs{dotfill}, but can be configured. Especially -% it suppresses the dots if a minimum number of dots cannot be set. -% -% \begin{declcs}{zdotfillsetup} -% |{|\textit{key$_1$=value$_1$, key$_2$=value$_2$, \dots}|}| -% \end{declcs} -% This command allows to configure the behaviour of \cs{zdotfill}. -% The following keys are available: -% \begin{description} -% \let\bfseries\relax -% \item[\texttt{min=}\meta{count value}]\mbox{}\\* -% If the actual number of dots are smaller than \meta{count value}, -% then the dots are suppressed. Default: |2|. -% \item[\texttt{unit=}\meta{dimen value}]\mbox{}\\* -% The width of a dot unit is given by \meta{dimen value}. -% Default: |0.44em| (same as the unit in \cs{dotfill}). -% \item[\texttt{dot=}\meta{value}]\mbox{}\\* -% The dot itself is given by \meta{value}. Default: |.| (dot, same as -% the dot in \cs{dotfill}). -% \end{description} -% -% \subsection{Module \xmodule{env}} -% -% This module defines two properties |envname| and |envline|. They -% remember the name of the environment and the line number at -% the start of the environment. -% -% \subsection{Module \xmodule{xr}} -% -% This package provides the functionality of package \xpackage{xr}, -% see \cite{xr}. It also supports the syntax of \xpackage{xr-hyper}. -% -% \begin{declcs}{zexternaldocument} -% \* |[|\meta{prefix}|]|\markbabel \M{external document} -% |[|\meta{url}|]| -% \end{declcs} -% See \cs{externaldocument} for a description of this option. -% The found labels also get a property |externaldocument| that -% remembers \meta{external document}. -% The standard reference scheme and the scheme of this -% package use different name spaces for reference names. -% If the external document uses both systems. Then one -% import statement would put the names in one namespace -% and probably causing problems with multiple references -% of the same name. Thus the star form only looks for -% \cs{newlabel} in the \xfile{.aux} files, whereas without -% star only \cs{zref@newlabel}s are used. -% -% In the star form it tries to detect labels from -% \xpackage{hyperref}, \xpackage{titleref}, and \xpackage{ntheorem}. -% If such an extended property from the packages before cannot -% be found or are empty, they are not included in the -% imported reference. -% -% Warnings are given if a reference name is already in use -% and the item is ignored. Unknown properties will automatically -% be declared. -% -% If the external references contain |anchor| properties, -% then we need also a url to be able to address the external -% file. As default the filename is taken with a default -% extension. -% -% \begin{declcs}{zxrsetup} -% |{|\textit{key$_1$=value$_1$, key$_2$=value$_2$, \dots}|}| -% \end{declcs} -% The following setup options are available: -% \begin{description} -% \item[\xoption{ext}:] It sets the default extension. -% \item[\xoption{tozreflabel}:] Boolean option. The found references -% are imported as zref labels. This is enabled by default. -% \item[\xoption{toltxlabel}:] Boolean option. The found references -% are imported as \hologo{LaTeX} labels. Packages \xpackage{nameref}, -% \xpackage{titleref} and class \xclass{memoir} are supported. -% \item[\xoption{urluse}:] Boolean option. If enabled, then a URL -% is stored in a macro and the macro is put in property `urluse'. -% The URL is not put in property `url'. -% The purpose is to save \hologo{TeX} memory. -% \item[\xoption{verbose}:] Boolean option. List the imported labels in the -% \xext{log} file. Default is |false|. -% \end{description} -% -% \begin{declcs}{zref@xr@ext} -% \end{declcs} -% If the \meta{url} is not specified in \cs{zref@externaldocument}, -% then the url will be constructed with the file name and -% this macro as extension. \cs{XR@ext} is used if -% \xpackage{hyperref} is loaded, otherwise |pdf|. -% -% \section{ToDo}\label{sec:todo} -% -% Among other things the following issues are left for future work: -% \begin{itemize} -% \item Other applications: autoref, hyperref, \dots -% \end{itemize} -% -% \section{Example} -% -% \begin{macrocode} -%<*example> -% \end{macrocode} -% -% \begin{macrocode} -\documentclass{book} - -\usepackage[ngerman]{babel}% - -\usepackage[savepos,totpages,titleref,dotfill,counter,user]{zref} - -% \end{macrocode} -% -% Chapters are wrapped inside \cs{ChapterStart} and -% \cs{ChapterStop}. The first argument \verb|#1| of \cs{ChapterStart} -% is used to form a label id \verb|chap:#1|. At the end of -% the chapter another label is set by \cs{zref@wrapper@immediate}, because -% otherwise at the end of document a deferred write would not -% be written, because there is no page for shipout. -% -% Also this example shows how chapter titles can be recorded. -% A new property \verb|chaptitle| is declared and added to the -% main property list. In \cs{ChapterStart} the current value -% of the property is updated. -% \begin{macrocode} -\makeatletter -\zref@newprop{chaptitle}{} -\zref@addprop{main}{chaptitle} - -\newcommand*{\ChapterStart}[2]{% - \cleardoublepage - \def\current@chapid{#1}% - \zref@setcurrent{chaptitle}{#2}% - \chapter{#2}% - \zlabel{chap:#1}% -} -\newcommand*{\ChapterStop}{% - \cleardoublepage - \zref@wrapper@immediate{% - \zref@labelbyprops{chapend:\current@chapid}{abspage}% - }% -} -% \end{macrocode} -% \cs{ChapterPages} calculates and returns the number of pages of the -% referenced chapter. -% \begin{macrocode} -\newcommand*{\ChapterPages}[1]{% - \zrefused{chap:#1}% - \zrefused{chapend:#1}% - \number\numexpr - \zref@extract{chapend:#1}{abspage}% - -\zref@extract{chap:#1}{abspage}% - +1\relax -} -\makeatother -% \end{macrocode} -% \begin{macrocode} -\begin{document} -% \end{macrocode} -% As exception we use \cs{makeatletter} here, because -% this is just an example file that also should show some of -% programmer's interface. -% \begin{macrocode} -\makeatletter - -\frontmatter -\zlabel{documentstart} - -\begin{itemize} -\item - The frontmatter part has - \number\numexpr\zref@extract{chap:first}{abspage}-1\relax - ~pages. -\item - Chapter \zref{chap:first} has \ChapterPages{first} page(s). -\item - Section \zref{hello} is on the - \ifcase\numexpr - \zref@extractdefault{hello}{page}{0}% - -\zref@extractdefault{chap:first}{page}{0}% - +1\relax - ??\or first\or second\or third\or forth\fi - ~page inside its chapter. -\item - The document has - \zref[abspage]{LastPage} pages. - This number is \ifodd\ztotpages odd\else even\fi. -\item - The last page is labeled with \zpageref{LastPage}. -\item - The title of chapter \zref{chap:next} % - is ``\zref[chaptitle]{chap:next}''. -\end{itemize} - -\tableofcontents - -\mainmatter -\ChapterStart{first}{First chapter} - -% \end{macrocode} -% The user level commands should protect babel shorthands -% where possible. On the other side, expandable extracting -% macros are useful in calculations, see above the -% examples with \cs{numexpr}. -% \begin{macrocode} -\section{Test} -\zlabel{a"o} -Section \zref{a"o} on page -\zref@wrapper@babel\zref@extract{a"o}{page}. - -Text. -\newpage - -\section{Hello World} -\zlabel{hello} - -\ChapterStop - -\ChapterStart{next}{Next chapter with \emph{umlauts}: "a"o"u"s} - -% \end{macrocode} -% -% Here an example follows that makes use of \pdfTeX's ``savepos'' -% feature. The position on the page is not known before the -% page is constructed and shipped out. Therefore the position -% ist stored in references and are available for calculations -% in the next \hologo{LaTeX} compile run. -% \begin{macrocode} -The width of the first column is - \the\dimexpr \zposx{secondcol}sp - \zposx{firstcol}sp\relax,\\ -the height difference of the two baselines is - \the\dimexpr \zposy{firstcol}sp - \zposy{secondline}sp\relax:\\ -\begin{tabular}{ll} - \zsavepos{firstcol}Hello&\zsavepos{secondcol}World\\ - \zsavepos{secondline}Second line&foobar\\ -\end{tabular} - -% \end{macrocode} -% With \cs{zrefused} \hologo{LaTeX} is notified, if the references -% are not yet available and \hologo{LaTeX} can generate the rerun -% hint. -% \begin{macrocode} -\zrefused{firstcol} -\zrefused{secondcol} -\zrefused{secondline} - -\ChapterStop -% \end{macrocode} -% Test for module \cs{dotfill}. -% \begin{macrocode} -\ChapterStart{dotfill}{Test for dotfill feature} -\newcommand*{\dftest}[1]{% - #1& - [\makebox[{#1}]{\dotfill}]& - [\makebox[{#1}]{\zdotfill}]\\ -} -\begin{tabular}{rll} -& [\verb|\dotfill|] & [\verb|\zdotfill|]\\ -\dftest{0.43em} -\dftest{0.44em} -\dftest{0.45em} -\dftest{0.87em} -\dftest{0.88em} -\dftest{0.89em} -\dftest{1.31em} -\dftest{1.32em} -\dftest{1.33em} -\end{tabular} -\ChapterStop -\end{document} -% \end{macrocode} -% -% \begin{macrocode} -%</example> -% \end{macrocode} -% -% \StopEventually{ -% } -% -% \section{Implementation} -% -% \subsection{Package \xpackage{zref}} -% -% \subsubsection{Identification} -% -% \begin{macrocode} -%<*package> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref} - [2018/11/21 v2.27 A new reference scheme for LaTeX (HO)]% -% \end{macrocode} -% -% \subsubsection{Load basic module} -% -% \begin{macrocode} -\RequirePackage{zref-base}[2018/11/21] -% \end{macrocode} -% Abort package loading if \xpackage{zref-base} could not be -% loaded successfully. -% \begin{macrocode} -\@ifundefined{ZREF@base@ok}{\endinput}{} -% \end{macrocode} -% -% \subsubsection{Process options} -% -% Known modules are loaded and the release date is checked. -% \begin{macrocode} -\def\ZREF@temp#1{% - \DeclareOption{#1}{% - \AtEndOfPackage{% - \RequirePackage{zref-#1}[2018/11/21]% - }% - }% -} -\ZREF@temp{abspage} -\ZREF@temp{counter} -\ZREF@temp{dotfill} -\ZREF@temp{hyperref} -\ZREF@temp{lastpage} -\ZREF@temp{marks} -\ZREF@temp{nextpage} -\ZREF@temp{pageattr} -\ZREF@temp{pagelayout} -\ZREF@temp{perpage} -\ZREF@temp{runs} -\ZREF@temp{savepos} -\ZREF@temp{thepage} -\ZREF@temp{titleref} -\ZREF@temp{totpages} -\ZREF@temp{user} -\ZREF@temp{xr} -% \end{macrocode} -% \begin{macrocode} -\ProcessOptions\relax -%</package> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{base}} -% -% \subsubsection{Prefixes} -% -% This package uses the following prefixes for macro names: -% \begin{description} -% \item[\cs{zref@}:] Macros of the programmer's interface. -% \item[\cs{ZREF@}:] Internal macros. -% \item[\cs{Z@L@}\metacs{listname}:] -% The properties of the list \meta{listname}. -% \item[\cs{Z@D@}\metacs{propname}:] -% The default value for property \meta{propname}. -% \item[\cs{Z@E@}\metacs{propname}:] -% Extract function for property \meta{propname}. -% \item[\cs{Z@X@}\metacs{propname}:] -% Information whether a property value for property -% \meta{propname} is expanded -% immediately or at shipout time. -% \item[\cs{Z@C@}\metacs{propname}:] -% Current value of the property \meta{propname}. -% \item[\cs{Z@R@}\metacs{labelname}:] -% Data for reference \meta{labelname}. -% \item[\cs{ZREF@org@}:] Original versions of patched commands. -% \item[\cs{z}:] For macros in user land, defined if -% module \xmodule{user} is set. -% \end{description} -% The following family names are used for keys defined -% according to the \xpackage{keyval} package: -% \begin{description} -% \item[\texttt{ZREF@TR}:] Setup for module \xmodule{titleref}. -% \end{description} -% -% \subsubsection{Identification} -% -% \begin{macrocode} -%<*base> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-base}% - [2018/11/21 v2.27 Module base for zref (HO)]% -% \end{macrocode} -% -% \subsubsection{Utilities} -% -% \begin{macrocode} -\RequirePackage{ltxcmds}[2010/12/02] -\RequirePackage{infwarerr}[2010/04/08] -\RequirePackage{kvsetkeys}[2010/03/01] -\RequirePackage{kvdefinekeys}[2010/03/01] -\RequirePackage{pdftexcmds}[2010/04/01] -% \end{macrocode} -% -% \begin{macro}{\ZREF@name} -% Several times the package name is used, thus we store it -% in \cmd{\ZREF@name}. -% \begin{macrocode} -\def\ZREF@name{zref} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\ltx@IfUndefined{protected}{% - \RequirePackage{makerobust}[2006/03/18]% -% \end{macrocode} -% \begin{macro}{\ZREF@Robust} -% \begin{macrocode} - \def\ZREF@Robust#1#2{% - \def\ZREF@temp{\MakeRobustcommand#2}% - \afterassignment\ZREF@temp - #1#2% - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -}{% -% \end{macrocode} -% \begin{macro}{\ZREF@Robust} -% \begin{macrocode} - \def\ZREF@Robust#1{% - \protected#1% - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -} -% \end{macrocode} -% \begin{macro}{\ZREF@IfDefinable} -% \begin{macrocode} -\def\ZREF@IfDefinable#1#2#3{% - \@ifdefinable{#1}{% - \ZREF@Robust{#2}#1#3% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@UpdatePdfTeX} -% \cs{ZREF@UpdatePdfTeX} is used as help message text in -% error messages. -% \begin{macrocode} -\def\ZREF@UpdatePdfTeX{Update pdfTeX.} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ifZREF@found} -% The following switch is usded in list processing. -% \begin{macrocode} -\newif\ifZREF@found -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@patch} -% Macro \cs{ZREF@patch} first checks the existence of -% the command and safes it. -% \begin{macrocode} -\def\ZREF@patch#1{% - \ltx@IfUndefined{#1}{% - \ltx@gobble - }{% - \expandafter\let\csname ZREF@org@#1\expandafter\endcsname - \csname #1\endcsname - \ltx@firstofone - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Check for \hologo{eTeX}} -% -% The use of \hologo{eTeX} should be standard nowadays for \hologo{LaTeX}. -% We test for \hologo{eTeX} in order to use its features later. -% \begin{macrocode} -\ltx@IfUndefined{eTeXversion}{% - \PackageError\ZREF@name{% - Missing support for eTeX; package is abandoned% - }{% - Use a TeX compiler that support eTeX and enable eTeX % - in the format.% - }% - \endinput -}{}% -% \end{macrocode} -% -% \begin{macrocode} -\RequirePackage{etexcmds}[2007/09/09] -\ifetex@unexpanded -\else - \PackageError\ZREF@name{% - Missing e-TeX's \string\unexpanded.\MessageBreak - Add \string\RequirePackage\string{etexcmds\string} before % - \string\documentclass% - }{% - Probably you are using some package (e.g. ConTeXt) that % - redefines \string\unexpanded% - }% - \expandafter\endinput -\fi -% \end{macrocode} -% -% \subsubsection{Auxiliary file stuff} -% -% We are using some commands in the \xfile{.aux} files. -% However sometimes these auxiliary files are interpreted -% by \hologo{LaTeX} processes that haven't loaded this package -% (e.g. package \xpackage{xr}). -% Therefore we provide dummy definitions. -% \begin{macrocode} -\RequirePackage{auxhook} -\AddLineBeginAux{% - \string\providecommand\string\zref@newlabel[2]{}% -} -% \end{macrocode} -% \begin{macro}{\ZREF@RefPrefix} -% \begin{macrocode} -\def\ZREF@RefPrefix{Z@R} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@newlabel} -% For the implementation of \cs{zref@newlabel} we call -% the same internal macro \cs{@newl@bel} that is used -% in \cs{newlabel}. Thus we have for free: -% \begin{itemize} -% \item \cs{Z@R@}\metacs{labelname} is defined. -% \item \hologo{LaTeX}'s check for multiple references. -% \item \hologo{LaTeX}'s check for changed references. -% \end{itemize} -% \begin{macrocode} -\ZREF@Robust\edef\zref@newlabel{% - \noexpand\@newl@bel{\ZREF@RefPrefix}% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Property lists} -% -% \begin{macro}{\zref@newlist} -% Property lists are stored as list of property names -% enclosed in curly braces. \cs{zref@newlist} -% creates a new list as empty list. Assignments to -% property lists are global. -% \begin{macrocode} -\ZREF@Robust\def\zref@newlist#1{% - \zref@iflistundefined{#1}{% - \@ifdefinable{Z@L@#1}{% - \global\expandafter\let\csname Z@L@#1\endcsname\ltx@empty - \PackageInfo\ZREF@name{New property list: #1}% - }% - }{% - \PackageError\ZREF@name{% - Property list `#1' already exists% - }\@ehc - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@iflistundefined} -% \cs{zref@iflistundefined} checks the existence of the -% property list \verb|#1|. If the property list is present, -% then \verb|#2| is executed and \verb|#3| otherwise. -% \begin{macrocode} -\def\zref@iflistundefined#1{% - \ltx@ifundefined{Z@L@#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@listexists} -% \cs{zref@listexists} only executes \verb|#2| if the -% property list \verb|#1| exists and raises an error -% message otherwise. -% \begin{macrocode} -\ZREF@Robust\def\zref@listexists#1{% - \zref@iflistundefined{#1}{% - \PackageError\ZREF@name{% - Property list `#1' does not exist% - }\@ehc - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@iflistcontainsprop} -% \cs{zref@iflistcontainsprop} checks, whether a property \verb|#2| is -% already present in a property list \verb|#1|. -% \begin{macrocode} -\ZREF@Robust\def\zref@iflistcontainsprop#1#2{% - \zref@iflistundefined{#1}{% - \ltx@secondoftwo - }{% - \begingroup\expandafter\endgroup - \expandafter\in@ - \csname#2\expandafter\expandafter\expandafter\endcsname - \expandafter\expandafter\expandafter{\csname Z@L@#1\endcsname}% - \csname ltx@\ifin@ first\else second\fi oftwo\endcsname - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@listforloop} -% \begin{macrocode} -\def\zref@listforloop#1#2{% - \zref@listexists{#1}{% - \expandafter\expandafter\expandafter\@tfor - \expandafter\expandafter\expandafter\zref@prop - \expandafter\expandafter\expandafter:% - \expandafter\expandafter\expandafter=% - \csname Z@L@#1\endcsname - \do{% - \begingroup - \escapechar=-1 % - \edef\x{\endgroup - \def\noexpand\zref@prop{% - \expandafter\string\zref@prop - }% - }% - \x - #2\zref@prop - }% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@addprops} -% \cs{zref@addprop} adds the properties \verb|#2| to the property -% list \verb|#1|, if the property is not already in the list. -% Otherwise a warning is given. -% \begin{macrocode} -\ZREF@Robust\def\zref@addprops#1#2{% - \zref@listexists{#1}{% - \comma@parse{#2}{% - \zref@propexists\comma@entry{% - \zref@iflistcontainsprop{#1}\comma@entry{% - \PackageWarning\ZREF@name{% - Property `\comma@entry' is already in list `#1'% - }% - }{% - \begingroup\expandafter\endgroup - \expandafter\g@addto@macro - \csname Z@L@#1\expandafter\endcsname - \expandafter{\csname\comma@entry\endcsname}% - }% - }% - \ltx@gobble - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@addprop} -% \cs{zref@addprop} adds the property \verb|#2| to the property -% list \verb|#1|, if the property is not already in the list. -% Otherwise a warning is given. -% \begin{macrocode} -\ZREF@Robust\def\zref@addprop#1#2{% - \zref@listexists{#1}{% - \zref@propexists{#2}{% - \zref@iflistcontainsprop{#1}{#2}{% - \PackageWarning\ZREF@name{% - Property `#2' is already in list `#1'% - }% - }{% - \begingroup\expandafter\endgroup - \expandafter\g@addto@macro - \csname Z@L@#1\expandafter\endcsname - \expandafter{\csname#2\endcsname}% - }% - }% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@localaddprops} -% \begin{macrocode} -\ZREF@Robust\def\zref@localaddprops#1#2{% - \zref@listexists{#1}{% - \comma@parse{#2}{% - \zref@propexists\comma@entry{% - \zref@iflistcontainsprop{#1}\comma@entry{% - \PackageWarning\ZREF@name{% - Property `\comma@entry' is already in list `#1'% - }% - }{% - \begingroup\expandafter\endgroup - \expandafter\ltx@LocalAppendToMacro - \csname Z@L@#1\expandafter\endcsname - \expandafter{\csname\comma@entry\endcsname}% - }% - }% - \ltx@gobble - }% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@localaddprop} -% \begin{macrocode} -\ZREF@Robust\def\zref@localaddprop#1#2{% - \zref@listexists{#1}{% - \zref@propexists{#2}{% - \zref@iflistcontainsprop{#1}{#2}{% - \PackageWarning\ZREF@name{% - Property `#2' is already in list `#1'% - }% - }{% - \begingroup\expandafter\endgroup - \expandafter\ltx@LocalAppendToMacro - \csname Z@L@#1\expandafter\endcsname - \expandafter{\csname#2\endcsname}% - }% - }% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\ltx@IfUndefined{pdf@strcmp}{% -% \end{macrocode} -% \begin{macro}{\zref@delprop} -% \begin{macrocode} - \ZREF@Robust\def\zref@delprop{% - \ZREF@delprop\gdef - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@localdelprop} -% \begin{macrocode} - \ZREF@Robust\def\zref@localdelprop{% - \ZREF@delprop\def - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@delprop} -% \begin{macrocode} - \def\ZREF@delprop#1#2#3{% - \zref@listexists{#2}{% - \begingroup - \escapechar=-1 % - \def\ZREF@param{#3}% - \@onelevel@sanitize\ZREF@param - \toks@{}% - \expandafter\expandafter\expandafter\ZREF@@delprop - \csname Z@L@#2\endcsname!% - \expandafter\endgroup - \expandafter#1\csname Z@L@#2\expandafter\endcsname - \expandafter{% - \the\toks@ - }% - }% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@@delprop} -% \begin{macrocode} - \def\ZREF@@delprop#1{% - \expandafter\ZREF@@@delprop\expandafter{\string#1}#1% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@@@delprop} -% \begin{macrocode} - \def\ZREF@@@delprop#1#2{% - \ifx#2!% - \else - \def\ZREF@temp{#1}% - \@onelevel@sanitize\ZREF@temp - \ifx\ZREF@param\ZREF@temp - \else - \toks@\expandafter{% - \the\expandafter\toks@\csname#1\endcsname - }% - \fi - \expandafter\ZREF@@delprop - \fi - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -}{% -% \end{macrocode} -% \begin{macro}{\zref@delprop} -% \begin{macrocode} - \ZREF@Robust\def\zref@delprop{% - \ZREF@delprop\xdef - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@localdelprop} -% \begin{macrocode} - \ZREF@Robust\def\zref@localdelprop{% - \ZREF@delprop\edef - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@delprop} -% \begin{macrocode} - \def\ZREF@delprop#1#2#3{% - \zref@listexists{#2}{% - \def\ZREF@param{#3}% - \edef\ZREF@SavedEscapechar{\the\escapechar}% - \escapechar=-1 % - \expandafter#1\csname Z@L@#2% - \expandafter\expandafter\expandafter\endcsname{% - \expandafter\expandafter\expandafter\ZREF@@delprop - \csname Z@L@#2\endcsname!% - }% - \escapechar=\ZREF@SavedEscapechar\relax - }% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@@delprop} -% Caution: |#1| might be an \cs{if} or similar token. -% \begin{macrocode} - \def\ZREF@@delprop#1{% - \expandafter\ZREF@@@delprop\expandafter{\string#1}#1% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@@@delprop} -% \begin{macrocode} - \def\ZREF@@@delprop#1#2{% - \ifx#2!% - \else - \ifnum\pdf@strcmp{#1}{\ZREF@param}=\ltx@zero - \else - \expandafter\noexpand\csname#1\endcsname - \fi - \expandafter\ZREF@@delprop - \fi - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -} -% \end{macrocode} -% -% \subsubsection{Properties} -% -% \begin{macro}{\zref@ifpropundefined} -% \cs{zref@ifpropundefined} checks the existence of the -% property \verb|#1|. If the property is present, -% then \verb|#2| is executed and \verb|#3| otherwise. -% \begin{macrocode} -\def\zref@ifpropundefined#1{% - \ltx@ifundefined{Z@E@#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@propexists} -% Some macros rely on the existence of a property. -% \cs{zref@propexists} only executes \verb|#2| if the -% property \verb|#1| exists and raises an error -% message otherwise. -% \begin{macrocode} -\ZREF@Robust\def\zref@propexists#1{% - \zref@ifpropundefined{#1}{% - \PackageError\ZREF@name{% - Property `#1' does not exist% - }\@ehc - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@newprop} -% A new property is declared by \cs{zref@newprop}, the -% property name \meta{propname} is given in \verb|#1|. The -% property is created and configured. If the star form -% is given, then the expansion of the property value -% is delayed to page shipout time, when the reference -% is written to the \xfile{.aux} file. -% \begin{description} -% \item[\cs{Z@D@}\metacs{propname}:] -% Stores the default value for this property. -% \item[\cs{Z@E@}\metacs{propname}:] -% Extract function. -% \item[\cs{Z@X@}\metacs{propname}:] -% Information whether the expansion of the property value -% is delayed to shipout time. -% \item[\cs{Z@C@}\metacs{propname}:] -% Current value of the property. -% \end{description} -% \begin{macrocode} -\ZREF@Robust\def\zref@newprop{% - \@ifstar{% - \let\ZREF@X\noexpand - \ZREF@newprop - }{% - \let\ZREF@X\ltx@empty - \ZREF@newprop - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@newprop} -% \begin{macrocode} -\def\ZREF@newprop#1{% - \edef\ZREF@P{#1}% - \@onelevel@sanitize\ZREF@P - \begingroup - \ifx\ZREF@P\ZREF@par - \@PackageError\ZREF@name{% - Invalid property name `\ZREF@P'% - }{% - The property name `par' is not allowed % - because of internal reasons.% - \MessageBreak - \@ehc - }% - \def\ZREF@@newprop[##1]##2{\endgroup}% - \else - \zref@ifpropundefined\ZREF@P{% - \endgroup - \PackageInfo\ZREF@name{% - New property: \ZREF@P - }% - }{% - \@PackageError\ZREF@name{% - Property `\ZREF@P' already exists% - }\@ehc - \def\ZREF@@newprop[##1]##2{\endgroup}% - }% - \fi - \@ifnextchar[\ZREF@@newprop{\ZREF@@newprop[\zref@default]}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@par} -% \begin{macrocode} -\def\ZREF@par{par} -\@onelevel@sanitize\ZREF@par -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@@newprop} -% \begin{macrocode} -\def\ZREF@@newprop[#1]{% - \global\@namedef{Z@D@\ZREF@P}{#1}% - \global\expandafter\let\csname Z@X@\ZREF@P\endcsname\ZREF@X - \begingroup\expandafter\endgroup - \expandafter\ZREF@@@newprop\csname\ZREF@P\endcsname - \expandafter\gdef\csname Z@C@\ZREF@P\endcsname{}% - \zref@setcurrent\ZREF@P -} -\def\ZREF@@@newprop#1{% - \expandafter - \gdef\csname Z@E@\ZREF@P\endcsname##1#1##2##3\ZREF@nil{##2}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@showprop} -% \begin{macrocode} -\ZREF@Robust\def\zref@showprop#1{% - \zref@ifpropundefined{#1}{% - \@PackageInfoNoLine{\ZREF@name}{% - Show property `#1': <undefined>% - }% - }{% - \begingroup - \toks@\expandafter\expandafter\expandafter{% - \csname Z@C@#1\endcsname - }% - \edef\ZREF@value{\the\toks@}% - \ltx@onelevel@sanitize\ZREF@value - \toks@\expandafter\expandafter\expandafter{% - \csname Z@D@#1\endcsname - }% - \edef\ZREF@default{\the\toks@}% - \ltx@onelevel@sanitize\ZREF@default - \@PackageInfoNoLine{\ZREF@name}{% - Show property `#1':\MessageBreak - \expandafter\ifx\csname Z@X@#1\endcsname\ltx@empty - Immediate % - \else - Delayed % - \fi - value: [\ZREF@value]\MessageBreak - Default: [\ZREF@default]% - }% - \endgroup - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@setcurrent} -% \cs{zref@setcurrent} sets the current value for a property. -% \begin{macrocode} -\ZREF@Robust\def\zref@setcurrent#1#2{% - \zref@propexists{#1}{% - \expandafter\def\csname Z@C@#1\endcsname{#2}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@getcurrent} -% \cs{zref@getcurrent} gets the current value for a property. -% \begin{macrocode} -\def\ZREF@getcurrent#1{% - \romannumeral0% - \ltx@ifundefined{Z@C@#1}{% - \ltx@space - }{% - \expandafter\expandafter\expandafter\ltx@space - \csname Z@C@#1\endcsname - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@u@getcurrent} -% \begin{macrocode} -\def\ZREF@wu@getcurrent#1{% - \etex@unexpanded\expandafter\expandafter\expandafter{% - \ZREF@getcurrent{#1}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@getcurrent} -% \begin{macrocode} -\let\zref@getcurrent\ZREF@getcurrent -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Reference generation} -% -% \begin{macro}{\zref@label} -% Label macro that uses the main property list. -% \begin{macrocode} -\ZREF@Robust\def\zref@label#1{% - \zref@labelbylist{#1}\ZREF@mainlist -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@labelbylist} -% Label macro that stores the properties, specified in the -% property list \verb|#2|. -% \begin{macrocode} -\ZREF@Robust\def\zref@labelbylist#1#2{% - \@bsphack - \zref@listexists{#2}{% - \expandafter\expandafter\expandafter\ZREF@label - \expandafter\expandafter\expandafter{% - \csname Z@L@#2\endcsname - }{#1}% - }% - \@esphack -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@labelbyprops} -% The properties are directly specified in a comma separated list. -% \begin{macrocode} -\ZREF@Robust\def\zref@labelbyprops#1#2{% - \@bsphack - \begingroup - \toks@{}% - \comma@parse{#2}{% - \zref@ifpropundefined\comma@entry{% - \PackageWarning\ZREF@name{% - Property `\comma@entry' is not known% - }% - }{% - \toks@\expandafter{% - \the\expandafter\toks@\csname\comma@entry\endcsname - }% - }% - \ltx@gobble - }% - \expandafter\endgroup - \expandafter\ZREF@label\expandafter{\the\toks@}{#1}% - \@esphack -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@labelbykv} -% \begin{macrocode} -\ZREF@Robust\def\zref@labelbykv#1#2{% - \@bsphack - \begingroup - \let\Z@L@ZREF@temp\ltx@empty - \kvsetkeys{ZREF@LABEL}{#1}% - \ifZREF@immediate - \expandafter\zref@wrapper@immediate\expandafter{% - \expandafter\ZREF@label\expandafter{\Z@L@ZREF@temp}{#2}% - }% - \else - \expandafter\ZREF@label\expandafter{\Z@L@ZREF@temp}{#2}% - \fi - \endgroup - \@esphack -} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\kv@define@key{ZREF@LABEL}{prop}{% - \edef\ZREF@param{#1}% - \zref@propexists\ZREF@param{% - \zref@iflistcontainsprop{ZREF@temp}\ZREF@param{}{% - \begingroup\expandafter\endgroup - \expandafter\ltx@LocalAppendToMacro - \expandafter\Z@L@ZREF@temp - \expandafter{\csname\ZREF@param\endcsname}% - }% - }% -} -\kv@define@key{ZREF@LABEL}{list}{% - \zref@listforloop{#1}{% - \zref@iflistcontainsprop{ZREF@temp}\zref@prop{}{% - \begingroup\expandafter\endgroup - \expandafter\ltx@LocalAppendToMacro - \expandafter\Z@L@ZREF@temp - \expandafter{\csname\zref@prop\endcsname}% - }% - \ltx@gobble - }% -} -\kv@define@key{ZREF@LABEL}{delprop}{% - \zref@propexists{#1}{% - \zref@localdelprop{ZREF@temp}{#1}% - }% -} -\kv@define@key{ZREF@LABEL}{immediate}[true]{% - \edef\ZREF@param{#1}% - \ifx\ZREF@param\ZREF@true - \ZREF@immediatetrue - \else - \ifx\ZREF@param\ZREF@false - \ZREF@immediatefalse - \else - \PackageWarning\ZREF@name{% - Option `immediate' expects `true' or `false'.\MessageBreak - Ignoring invalid value `\ZREF@param'% - }% - \fi - \fi -} -% \end{macrocode} -% \begin{macro}{\ZREF@false} -% \begin{macrocode} -\def\ZREF@false{false} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@true} -% \begin{macrocode} -\def\ZREF@true{true} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\kv@define@key{ZREF@LABEL}{values}[]{% - \kv@parse{#1}{% - \ifx\kv@value\relax - \@PackageWarning\ZREF@name{% - Missing value for property `\kv@key'% - }% - \expandafter\ltx@gobbletwo - \else - \expandafter\zref@setcurrent - \fi - }% -} -% \end{macrocode} -% -% \begin{macro}{\ifZREF@immediate} -% The switch \cs{ifZREF@immediate} tells us, whether the -% label should be written immediately or at page shipout time. -% \cs{ZREF@label} need to be notified about this, because -% it must disable the deferred execution of property values, -% if the label is written immediately. -% \begin{macrocode} -\newif\ifZREF@immediate -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@wrapper@immediate} -% The argument of \cs{zref@wrapper@immediate} is executed inside -% a group where \cs{write} is redefined by adding -% \cs{immediate} before its execution. Also \cs{ZREF@label} -% is notified via the switch \cs{ifZREF@immediate}. -% \begin{macrocode} -\ZREF@Robust{\long\def}\zref@wrapper@immediate#1{% - \begingroup - \ZREF@immediatetrue - \let\ZREF@org@write\write - \def\write{\immediate\ZREF@org@write}% - #1% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@label} -% \cs{ZREF@label} writes the data in the \xfile{.aux} file. -% \verb|#1| contains the list of valid properties, -% \verb|#2| the name of the reference. In case of immediate -% writing, the deferred execution of property values is -% disabled. Also \thepage is made expandable in this case. -% \begin{macrocode} -\def\ZREF@label#1#2{% - \if@filesw - \begingroup - \ifZREF@immediate - \let\ZREF@org@thepage\thepage - \fi - \protected@write\@auxout{% - \ifZREF@immediate - \let\thepage\ZREF@org@thepage - \fi - \let\ZREF@temp\ltx@empty - \@tfor\ZREF@P:=#1\do{% - \begingroup - \escapechar=-1 % - \edef\x{\endgroup - \def\noexpand\ZREF@P{% - \expandafter\string\ZREF@P - }% - }% - \x - \expandafter\ifx - \csname - \ifZREF@immediate - relax% - \else - Z@X@\ZREF@P% - \fi - \endcsname - \noexpand - \expandafter\let\csname Z@C@\ZREF@P\endcsname\relax - \fi - \toks@\expandafter{\ZREF@temp}% - \edef\ZREF@temp{% - \the\toks@ - \ltx@backslashchar\ZREF@P{% - \expandafter\noexpand\csname Z@C@\ZREF@P\endcsname - }% - }% - }% - }{% - \string\zref@newlabel{#2}{\ZREF@temp}% - }% - \endgroup - \fi -} -\def\ZREF@addtoks#1{% - \toks@\expandafter\expandafter\expandafter{% - \expandafter\the\expandafter\toks@#1% - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Reference querying and extracting} -% -% Design goal for the extracting macros is that the extraction -% process is full expandable. Thus these macros can be used -% in expandable contexts. But there are problems that cannot -% be solved by full expandable macros: -% \begin{itemize} -% \item In standard \hologo{LaTeX} undefined references sets a flag -% and generate a warning. Both actions are not expandable. -% \item Babel's support for its shorthand uses commands that -% use non-expandable assignments. However currently there -% is hope, that primitives are added to \pdfTeX\ that -% allows the detection of contexts. Then the shorthand -% can detect, if they are executed inside \cs{csname} -% and protect themselves automatically. -% \end{itemize} -% \begin{macro}{\zref@ifrefundefined} -% If a reference \verb|#1| is undefined, then macro -% \cs{zref@ifrefundefined} calls \verb|#2| and \verb|#3| otherwise. -% \begin{macrocode} -\def\zref@ifrefundefined#1{% - \ltx@ifundefined{Z@R@#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zifrefundefined} -% If a reference \verb|#1| is undefined, then macro -% \cs{zref@ifrefundefined} calls \verb|#2| and \verb|#3| otherwise. -% Also the reference is marked used. -% \begin{macrocode} -\ZREF@IfDefinable\zifrefundefined\def{% - #1{% - \zref@wrapper@babel\ZREF@ifrefundefined{#1}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@ifrefundefined} -% \begin{macrocode} -\def\ZREF@ifrefundefined#1{% - \zref@refused{#1}% - \zref@ifrefundefined{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@refused} -% The problem with undefined references is addressed by -% the macro \cs{zref@refused}. This can be used outside -% the expandable context. In case of an undefined reference -% the flag is set to notify \hologo{LaTeX} and a warning is given. -% \begin{macrocode} -\ZREF@Robust\def\zref@refused#1{% - \zref@wrapper@babel\ZREF@refused{#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@refused} -% \begin{macrocode} -\def\ZREF@refused#1{% - \zref@ifrefundefined{#1}{% - \protect\G@refundefinedtrue - \@latex@warning{% - Reference `#1' on page \thepage \space undefined% - }% - }{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@ifrefcontainsprop} -% \cs{zref@ifrefcontainsprop} looks, if the reference \verb|#1| -% has the property \verb|#2| and calls then \verb|#3| and -% \verb|#4| otherwise. -% \begin{macrocode} -\def\zref@ifrefcontainsprop#1#2{% - \zref@ifrefundefined{#1}{% - \ltx@secondoftwo - }{% - \expandafter\ZREF@ifrefcontainsprop - \csname Z@E@#2\expandafter\endcsname - \csname#2\expandafter\expandafter\expandafter\endcsname - \expandafter\expandafter\expandafter{% - \csname Z@R@#1\endcsname - }% - }% -} -\def\ZREF@ifrefcontainsprop#1#2#3{% - \expandafter\ifx\expandafter\ZREF@novalue - #1#3#2\ZREF@novalue\ZREF@nil\ltx@empty - \expandafter\ltx@secondoftwo - \else - \expandafter\ltx@firstoftwo - \fi -} -\def\ZREF@novalue{\ZREF@NOVALUE} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@extract} -% \cs{zref@extract} is an abbreviation for the case -% that the default of the property is used as default -% value. -% \begin{macrocode} -\def\ZREF@extract#1#2{% - \romannumeral0% - \ltx@ifundefined{Z@D@#2}{% - \expandafter\ltx@space\zref@default - }{% - \expandafter\expandafter\expandafter\ZREF@@extract - \expandafter\expandafter\expandafter{% - \csname Z@D@#2\endcsname - }{#1}{#2}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@@extract} -% \begin{macrocode} -\def\ZREF@@extract#1#2#3{% - \expandafter\expandafter\expandafter\ltx@space - \zref@extractdefault{#2}{#3}{#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@wu@extract} -% \begin{macrocode} -\def\ZREF@wu@extract#1#2{% - \etex@unexpanded\expandafter\expandafter\expandafter{% - \ZREF@extract{#1}{#2}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@extract} -% \begin{macrocode} -\let\zref@extract\ZREF@extract -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@extractdefault} -% The basic extracting macro is \cs{zref@extractdefault} with -% the reference name in \verb|#1|, the property in \verb|#2| and -% the default value in \verb|#3| in case for problems. -% \begin{macrocode} -\def\ZREF@extractdefault#1#2#3{% - \romannumeral0% - \zref@ifrefundefined{#1}\ltx@firstoftwo{% - \zref@ifpropundefined{#2}\ltx@firstoftwo\ltx@secondoftwo - }{% - \ltx@space - #3% - }{% - \expandafter\expandafter\expandafter\ltx@space - \csname Z@E@#2\expandafter\expandafter\expandafter\endcsname - \csname Z@R@#1\expandafter\endcsname - \csname#2\endcsname{#3}\ZREF@nil - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@wu@extractdefault} -% \begin{macrocode} -\def\ZREF@wu@extractdefault#1#2#3{% - \etex@unexpanded\expandafter\expandafter\expandafter{% - \ZREF@extractdefault{#1}{#2}{#3}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@extractdefault} -% \begin{macrocode} -\let\zref@extractdefault\ZREF@extractdefault -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@def@extract} -% \begin{macrocode} -\ZREF@Robust\def\zref@def@extract#1{% - \zref@wrapper@babel{\ZREF@def@extract{#1}}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@def@extract} -% \begin{macrocode} -\def\ZREF@def@extract#1#2#3{% - \zref@refused{#2}% - \expandafter\expandafter\expandafter\def - \expandafter\expandafter\expandafter#1% - \expandafter\expandafter\expandafter{% - \zref@extract{#2}{#3}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@def@extractdefault} -% \begin{macrocode} -\ZREF@Robust\def\zref@def@extractdefault#1{% - \zref@wrapper@babel{\ZREF@def@extractdefault{#1}}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@def@extractdefault} -% \begin{macrocode} -\def\ZREF@def@extractdefault#1#2#3#4{% - \zref@refused{#2}% - \expandafter\expandafter\expandafter\def - \expandafter\expandafter\expandafter#1% - \expandafter\expandafter\expandafter{% - \zref@extractdefault{#2}{#3}{#4}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@wrapper@unexpanded} -% \begin{macrocode} -\ZREF@Robust{\long\def}\ZREF@wrapper@unexpanded#1{% - \let\zref@wrapper@unexpanded\ltx@firstofone - \let\zref@getcurrent\ZREF@wu@getcurrent - \let\zref@extractdefault\ZREF@wu@extractdefault - \let\zref@extract\ZREF@wu@extract - #1% - \let\zref@wrapper@unexpanded\ZREF@wrapper@unexpanded - \let\zref@getcurrent\ZREF@getcurrent - \let\zref@extractdefault\ZREF@extractdefault - \let\zref@extract\ZREF@extract -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@wrapper@unexpanded} -% \begin{macrocode} -\ltx@IfUndefined{etex@unexpanded}{% - \let\zref@wrapper@unexpanded\ltx@firstofone -}{% - \let\zref@wrapper@unexpanded\ZREF@wrapper@unexpanded -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Compatibility with \xpackage{babel}} -% -% \begin{macro}{\zref@wrapper@babel} -% \begin{macrocode} -\ZREF@Robust{\long\def}\zref@wrapper@babel#1#2{% - \ifcsname if@safe@actives\endcsname - \expandafter\ltx@firstofone - \else - \expandafter\ltx@secondoftwo - \fi - {% - \if@safe@actives - \expandafter\ltx@secondoftwo - \else - \expandafter\ltx@firstoftwo - \fi - {% - \begingroup - \csname @safe@activestrue\endcsname - \edef\x{#2}% - \expandafter\endgroup - \expandafter\ZREF@wrapper@babel\expandafter{\x}{#1}% - }% - }{% - #1{#2}% - }% -} -\long\def\ZREF@wrapper@babel#1#2{% - #2{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Unique counter support} -% -% \begin{macro}{\zref@require@unique} -% Generate the counter |zref@unique| if the counter does not -% already exist. -% \begin{macrocode} -\ZREF@Robust\def\zref@require@unique{% - \@ifundefined{c@zref@unique}{% - \begingroup - \let\@addtoreset\ltx@gobbletwo - \newcounter{zref@unique}% - \endgroup -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\thezref@unique} -% \cs{thezref@unique} is used for automatically generated unique -% labelnames. -% \begin{macrocode} - \renewcommand*{\thezref@unique}{% - zref@\number\c@zref@unique - }% - }{}% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Utilities} -% -% \begin{macro}{\ZREF@number} -% \begin{macrocode} -\ltx@IfUndefined{numexpr}{% - \def\ZREF@number#1{\number#1}% -}{% - \def\ZREF@number#1{\the\numexpr(#1)\relax}% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Setup} -% -% \begin{macro}{\zref@setdefault} -% Standard \hologo{LaTeX} prints ``??'' in bold face if a reference -% is not known. \cs{zref@default} holds the text that is -% printed in case of unknown references and is used, if -% the default was not specified during the definition -% of the new property by \cs{ref@newprop}. -% The global default value can be set by \cs{zref@setdefault}. -% \begin{macrocode} -\ZREF@Robust\def\zref@setdefault#1{% - \def\zref@default{#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@default} -% Now we initialize \cs{zref@default} with the same value -% that \hologo{LaTeX} uses for its undefined references. -% \begin{macrocode} -\zref@setdefault{% - \nfss@text{\reset@font\bfseries ??}% -} -% \end{macrocode} -% \end{macro} -% -% \paragraph{Main property list.} -% -% \begin{macro}{\zref@setmainlist} -% The name of the default property list is stored in -% \cs{ZREF@mainlist} and can be set by \cs{zref@setmainlist}. -% \begin{macrocode} -\ZREF@Robust\def\zref@setmainlist#1{% - \def\ZREF@mainlist{#1}% -} -\zref@setmainlist{main} -% \end{macrocode} -% \end{macro} -% Now we create the list. -% \begin{macrocode} -\zref@newlist\ZREF@mainlist -% \end{macrocode} -% -% \paragraph{Main properties.} -% -% The two properties \texttt{default} and \texttt{page} -% are created and added to the main property list. -% They store the data that -% standard \hologo{LaTeX} uses in its references created by -% \cs{label}. -% \begin{description} -% \item[\texttt{default}] the apperance of the latest -% counter that is incremented by \cs{refstepcounter} -% \item[\texttt{page}] the apperance of the page counter -% \end{description} -% \begin{macrocode} -\zref@newprop{default}{\@currentlabel} -\zref@newprop*{page}{\thepage} -\zref@addprops\ZREF@mainlist{default,page} -% \end{macrocode} -% -% \paragraph{Properties} -% -% \begin{macro}{\ZREF@NewPropAnchor} -% \begin{macrocode} -\def\ZREF@NewPropAnchor{% - \zref@newprop{anchor}{% - \ltx@ifundefined{@currentHref}{}{\@currentHref}% - }% - \global\let\ZREF@NewPropAnchor\relax -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@titleref@current} -% Later we will redefine the section and caption macros -% to catch the current title and remember the value in -% \cs{zref@titleref@current}. -% \begin{macro}{\ZREF@NewPropTitle} -% \begin{macrocode} -\def\ZREF@NewPropTitle{% - \gdef\zref@titleref@current{}% - \zref@newprop{title}{\zref@titleref@current}% - \global\let\ZREF@NewPropTitle\relax -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \begin{macro}{\ZREF@NewPropTheotype} -% \begin{macrocode} -\def\ZREF@NewPropTheotype{% - \zref@newprop{theotype}{}% - \global\let\ZREF@NewPropTheotype\relax -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@NewPropPageValue} -% \begin{macrocode} -\def\ZREF@NewPropPageValue{% - \zref@newprop*{pagevalue}[0]{\number\c@page}% - \global\let\ZREF@NewPropPageValue\relax -} -% \end{macrocode} -% \end{macro} -% -% \paragraph{Mark successful loading} -% -% \begin{macrocode} -\let\ZREF@base@ok=Y -%</base> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{user}} -% -% \begin{macrocode} -%<*user> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-user}% - [2018/11/21 v2.27 Module user for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% Module \xmodule{user} enables a small user interface. -% All macros are prefixed by \cs{z}. -% -% First we define the pendants to the standard \hologo{LaTeX} referencing -% commands \cs{label}, \cs{ref}, and \cs{pageref}. -% -% \begin{macro}{\zlabel} -% Similar to \cs{label} the macro \cs{zlabel} writes a reference -% entry in the \xfile{.aux} file. The main property list is used. -% Also we add the babel patch. The \cs{label} command can also be -% used inside section titles, but it must not go into the -% table of contents. Therefore we have to check this situation. -% \begin{macrocode} -\newcommand*\zlabel{% - \ifx\label\ltx@gobble - \expandafter\ltx@gobble - \else - \expandafter\zref@wrapper@babel\expandafter\zref@label - \fi -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zkvlabel} -% \begin{macrocode} -\newcommand*{\zkvlabel}[1]{% - \ifx\label\ltx@gobble - \expandafter\ltx@gobblethree - \fi - \zref@wrapper@babel{\zref@labelbykv{#1}}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref} -% Macro \cs{zref} is the corresponding macro for \cs{ref}. -% Also it provides an optional argument in order to -% select another property. -% \begin{macrocode} -\newcommand*{\zref}[2][default]{% robust because of optional argument - \zref@propexists{#1}{% - \zref@wrapper@babel\ZREF@zref{#2}{#1}% - }% -}% -\def\ZREF@zref#1{% - \zref@refused{#1}% - \zref@extract{#1}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zpageref} -% For macro \cs{zpageref} we just call \cs{zref} -% with property \verb|page|. -% \begin{macrocode} -\ZREF@IfDefinable\zpageref\def{% - {\zref[page]}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zrefused} -% For the following expandible user macros \cs{zrefused} -% should be used to notify \hologo{LaTeX} in case of undefined -% references. -% \begin{macrocode} -\ZREF@IfDefinable\zrefused\def{% - {\zref@refused}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</user> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{abspage}} -% -% \begin{macrocode} -%<*abspage> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-abspage}% - [2018/11/21 v2.27 Module abspage for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% Module \xmodule{abspage} adds a new property \verb|abspage| -% to the \verb|main| property list for absolute page numbers. -% These are recorded by the help of package \xpackage{atbegshi}. -% \begin{macrocode} -\RequirePackage{atbegshi}[2011/10/05]% -% \end{macrocode} -% The counter \verb|abspage| must not go in the clear list -% of \verb|@ckpt| that is used to set counters in -% \xfile{.aux} files of included \hologo{TeX} files. -% \begin{macrocode} -\begingroup - \let\@addtoreset\ltx@gobbletwo - \newcounter{abspage}% -\endgroup -\setcounter{abspage}{0}% -\AtBeginShipout{% - \stepcounter{abspage}% -}% -\zref@newprop*{abspage}[0]{\the\c@abspage}% -\zref@addprop\ZREF@mainlist{abspage}% -% \end{macrocode} -% Note that counter \verb|abspage| shows the -% previous page during page processing. Before -% shipout the counter is incremented. -% Thus the property is correctly written with -% deferred writing. If the counter is written -% using \cs{zref@wrapper@immediate}, then the number -% is too small by one. -% -% \begin{macrocode} -%</abspage> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{counter}} -% -% \begin{macrocode} -%<*counter> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-counter}% - [2018/11/21 v2.27 Module counter for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% For features such as \xpackage{hyperref}'s \cs{autoref} -% we need the name of the counter. The property -% \verb|counter| is defined and added to the main property -% list. -% \begin{macrocode} -\zref@newprop{counter}{} -\zref@addprop\ZREF@mainlist{counter} -% \end{macrocode} -% -% \cs{refstepcounter} is the central macro where we know -% which counter is responsible for the reference. -% \begin{macrocode} -\AtBeginDocument{% - \ZREF@patch{refstepcounter}{% - \def\refstepcounter#1{% - \zref@setcurrent{counter}{#1}% - \ZREF@org@refstepcounter{#1}% - }% - }% -} -% \end{macrocode} -% \begin{macrocode} -%</counter> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{lastpage}} -% -% \begin{macrocode} -%<*lastpage> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-lastpage}% - [2018/11/21 v2.27 Module lastpage for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\RequirePackage{zref-abspage}[2018/11/21] -\RequirePackage{atveryend}[2009/12/07] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% The module \xmodule{lastpage} implements the service -% of package \xpackage{lastpage} by setting a reference -% \verb|LastPage| at the end of the document. -% If module \xmodule{abspage} is given, also the absolute -% page number is available, because the properties of -% the main property list are used. -% \begin{macrocode} -\zref@newlist{LastPage} -\AfterLastShipout{% - \if@filesw - \begingroup - \advance\c@page\m@ne - \toks@\expandafter\expandafter\expandafter{% - \expandafter\Z@L@main - \Z@L@LastPage - }% - \expandafter\zref@wrapper@immediate\expandafter{% - \expandafter\ZREF@label\expandafter{\the\toks@}{LastPage}% - }% - \endgroup - \fi -} -% \end{macrocode} -% \begin{macro}{\zref@iflastpage} -% \begin{macrocode} -\def\zref@iflastpage#1{% - \ifnum\zref@extractdefault{#1}{abspage}{-1}=% - \zref@extractdefault{LastPage}{abspage}{-2} % - \expandafter\ltx@firstoftwo - \else - \expandafter\ltx@secondoftwo - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ziflastpage} -% \begin{macrocode} -\ZREF@IfDefinable\ziflastpage\def{% - {\zref@wrapper@babel\ZREF@iflastpage}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{ZREF@iflastpage} -% \begin{macrocode} -\def\ZREF@iflastpage#1{% - \zref@refused{LastPage}% - \zref@refused{#1}% - \zref@iflastpage{#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -%</lastpage> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{thepage}} -% -% \begin{macrocode} -%<*thepage> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-thepage}% - [2018/11/21 v2.27 Module thepage for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% \begin{macrocode} -\RequirePackage{atbegshi}[2011/10/05] -\RequirePackage{zref-abspage}[2018/11/21] -% \end{macrocode} -% \begin{macrocode} -\zref@newlist{thepage} -\zref@addprop{thepage}{page} -\ZREF@NewPropPageValue -% \end{macrocode} -% \begin{macro}{\zref@thepage@atbegshi@hook} -% \begin{macrocode} -\let\zref@thepage@atbegshi@hook\ltx@empty -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\zref@addprop{thepage}{pagevalue} -\AtBeginShipout{% - \AtBeginShipoutAddToBox{% - \zref@thepage@atbegshi@hook - \zref@labelbylist{thepage\the\value{abspage}}{thepage}% - }% -} -% \end{macrocode} -% \begin{macro}{\zref@thepage@name} -% \begin{macrocode} -\ltx@IfUndefined{numexpr}{% - \def\zref@thepage@name#1{thepage\number#1}% -}{% - \def\zref@thepage@name#1{thepage\the\numexpr#1}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@thepage} -% \begin{macrocode} -\def\zref@thepage#1{% - \zref@extract{\zref@thepage@name{#1}}{page}% -}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@thepage@refused} -% \begin{macrocode} -\ZREF@Robust\def\zref@thepage@refused#1{% - \zref@refused{\zref@thepage@name{#1}}% -}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zthepage} -% \begin{macrocode} -\ZREF@IfDefinable\zthepage\def{% - #1{% - \zref@thepage@refused{#1}% - \zref@thepage{#1}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -%</thepage> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{nextpage}} -% -% \begin{macrocode} -%<*nextpage> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-nextpage}% - [2018/11/21 v2.27 Module nextpage for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% \begin{macrocode} -\RequirePackage{zref-abspage}[2018/11/21] -\RequirePackage{zref-thepage}[2018/11/21] -\RequirePackage{zref-lastpage}[2018/11/21] -\RequirePackage{uniquecounter}[2009/12/18] -% \end{macrocode} -% \begin{macrocode} -\UniqueCounterNew{znextpage} - -\newcommand*{\znextpagesetup}{% - \afterassignment\ZREF@np@setup@i - \def\ZREF@np@call@unknown##1% -} -\def\ZREF@np@setup@i{% - \afterassignment\ZREF@np@setup@ii - \def\ZREF@np@call@nonext##1% -} -\def\ZREF@np@setup@ii{% - \def\ZREF@np@call@next##1% -} -\def\ZREF@np@call@unknown#1{#1} -\def\ZREF@np@call@nonext#1{#1} -\def\ZREF@np@call@next#1{#1} -\ZREF@IfDefinable\znextpage\def{% - {\UniqueCounterCall{znextpage}{\ZREF@nextpage}}% -}% -\newcommand*{\znonextpagename}{} -\newcommand*{\zunknownnextpagename}{\Z@D@page} -\def\ZREF@nextpage#1{% - \begingroup - \def\ZREF@refname@this{zref@np#1}% - \zref@labelbyprops\ZREF@refname@this{abspage}% - \chardef\ZREF@call=0 % unknown - \ZREF@ifrefundefined\ZREF@refname@this{% - }{% - \edef\ZREF@pagenum@this{% - \zref@extractdefault\ZREF@refname@this{abspage}{0}% - }% - \edef\ZREF@refname@next{% - \zref@thepage@name{% - \the\numexpr\ZREF@pagenum@this+1% - }% - }% - \ifnum\ZREF@pagenum@this>0 % - \ZREF@ifrefundefined{LastPage}{% - \zref@ifrefundefined\ZREF@refname@next{% - }{% - \chardef\ZREF@call=2 % next page - }% - }{% - \edef\ZREF@pagenum@last{% - \zref@extractdefault{LastPage}{abspage}{0}% - }% - \ifnum\ZREF@pagenum@this<\ZREF@pagenum@last\ltx@space - \ZREF@ifrefundefined\ZREF@refname@next{% - }{% - \chardef\ZREF@call=2 % next page - }% - \else - \ifnum\ZREF@pagenum@this=\ZREF@pagenum@this\ltx@space - \chardef\ZREF@call=1 % no next page - \fi - \fi - }% - \fi - }% - \edef\x{% - \endgroup - \ifcase\ZREF@call - \noexpand\ZREF@np@call@unknown{% - \noexpand\zunknownnextpagename - }% - \or - \noexpand\ZREF@np@call@nonext{% - \noexpand\znonextpagename - }% - \else - \noexpand\ZREF@np@call@next{% - \noexpand\zref@extract{\ZREF@refname@next}{page}% - }% - \fi - }% - \x -} -% \end{macrocode} -% \begin{macrocode} -%</nextpage> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{totpages}} -% -% \begin{macrocode} -%<*totpages> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-totpages}% - [2018/11/21 v2.27 Module totpages for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% The absolute page number of the last page is the total -% page number. -% \begin{macrocode} -\RequirePackage{zref-abspage}[2018/11/21] -\RequirePackage{zref-lastpage}[2018/11/21] -% \end{macrocode} -% -% \begin{macro}{\ztotpages} -% Macro \cs{ztotpages} contains the number of pages. It can be -% used inside expandable calculations. It expands to zero if -% the reference is not yet available. -% \begin{macrocode} -\newcommand*{\ztotpages}{% - \zref@extractdefault{LastPage}{abspage}{0}% -} -% \end{macrocode} -% \end{macro} -% Also we mark the reference |LastPage| as used: -% \begin{macrocode} -\AtBeginDocument{% - \zref@refused{LastPage}% -} -% \end{macrocode} -% \begin{macrocode} -%</totpages> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{pagelayout}} -% -% \begin{macrocode} -%<*pagelayout> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-pagelayout}% - [2018/11/21 v2.27 Module pagelayout for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% \begin{macrocode} -\RequirePackage{zref-thepage}[2018/11/21] -\RequirePackage{ifluatex}[2010/03/01] -\RequirePackage{atveryend}[2010/03/24] -% \end{macrocode} -% -% \subsubsection{Support for \hologo{LuaTeX}} -% -% \begin{macrocode} -\ifluatex - \ifnum\luatexversion<39 % - \else - \begingroup - \escapechar=-1 % - \def\ZREF@temp#1{% - \ltx@IfUndefined{\string#1}{% - \let#1\ltx@undefined - \directlua{% - if tex.enableprimitives then % - tex.enableprimitives('', {'\string#1'})% - end% - }% - \ltx@ifundefined{\string#1}{% - }{% - \global#1=#1% - \@PackageInfoNoLine{zref-pagelayout}{% - \string#1 enabled% - }% - }% - }{}% - }% - \ZREF@temp\pdfpagewidth - \ZREF@temp\pdfpageheight - \ZREF@temp\pdfhorigin - \ZREF@temp\pdfvorigin - \endgroup - \fi -\fi -% \end{macrocode} -% -% \subsubsection{Define layout properties} -% -% \begin{macrocode} -\def\ZREF@temp#1{% - \begingroup - \escapechar=-1 % - \ltx@ifundefined{\string#1}{\endgroup}{% - \edef\x{% - \endgroup - \noexpand\zref@newprop*{\string#1}% - [\noexpand\number\noexpand#1]% hash-ok - {\noexpand\number\noexpand#1}% - \noexpand\zref@addprop{thepage}{\string#1}% - }% - \x - }% -} -\ZREF@temp\mag -\ZREF@temp\paperwidth -\ZREF@temp\paperheight -\ZREF@temp\stockwidth % memoir.cls, crop.sty -\ZREF@temp\stockheight % memoir.cls, crop.sty -\ZREF@temp\mediawidth % VTeX -\ZREF@temp\mediaheight % VTeX -\ZREF@temp\pdfpagewidth -\ZREF@temp\pdfpageheight -\ZREF@temp\pdfhorigin -\ZREF@temp\pdfvorigin -\ZREF@temp\hoffset -\ZREF@temp\voffset -\ZREF@temp\topmargin -\ZREF@temp\oddsidemargin -\ZREF@temp\evensidemargin -\ZREF@temp\textwidth -\ZREF@temp\textheight -\ZREF@temp\headheight -\ZREF@temp\headsep -\ZREF@temp\footskip -\ZREF@temp\marginparwidth -\ZREF@temp\marginparsep -\ZREF@temp\columnwidth -\ZREF@temp\columnsep -\ZREF@temp\trimedge % memoir.cls -\ZREF@temp\spinemargin % memoir.cls -\ZREF@temp\foremargin % memoir.cls -\ZREF@temp\trimtop % memoir.cls -\ZREF@temp\uppermargin % memoir.cls -\ZREF@temp\headmargin % memoir.cls -% \end{macrocode} -% -% \begin{macrocode} -\zref@newprop*{outputboxwd}[0pt]{\AtBeginShipoutBoxWidth} -% \end{macrocode} -% \begin{macrocode} -\zref@newprop*{outputboxht}[0pt]{\AtBeginShipoutBoxHeight} -% \end{macrocode} -% \begin{macrocode} -\zref@newprop*{outputboxdp}[0pt]{\AtBeginShipoutBoxDepth} -% \end{macrocode} -% \begin{macrocode} -\zref@addprops{thepage}{outputboxwd,outputboxht,outputboxdp} -% \end{macrocode} -% -% \begin{macro}{\ifZREF@pl@list} -% \begin{macrocode} -\ltx@newif\ifZREF@pl@list -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@listpagelayout} -% \begin{macrocode} -\ZREF@IfDefinable\zlistpagelayout\def{% - {\global\ZREF@pl@listtrue}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@pl@AfterLastShipout} -% \begin{macrocode} -\def\ZREF@pl@AfterLastShipout{% - \ifZREF@pl@list - \edef\ZREF@page@max{\the\value{abspage}}% - \ltx@ifundefined{ZREF@org@testdef}{% - \let\ZREF@org@testdef\@testdef - \def\@testdef##1##2##3{% - \ZREF@org@testdef{##1}{##2}{##3}% - \def\ZREF@temp{##1}% - \ifx\ZREF@temp\ZREF@RefPrefix - \expandafter\gdef\csname##1@##2\endcsname{##3}% - \fi - }% - }{}% - \AtVeryEndDocument{\ZREF@pl@AtVeryEnd}% - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@pl@AtVeryEnd} -% \begin{macrocode} -\def\ZREF@pl@AtVeryEnd{% - \begingroup - \toks@{Page layout parameters:\MessageBreak}% - \count@=1 % - \ZREF@pl@ListPage - \edef\x{\endgroup - \noexpand\@PackageInfoNoLine{zref-pagelayout}{\the\toks@}% - }% - \x -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@pl@ListPage} -% \begin{macrocode} -\def\ZREF@pl@ListPage{% - \edef\x{% - \toks@={% - \the\toks@ - Page \the\count@:\noexpand\MessageBreak - \zref@ifrefundefined{thepage\the\count@}{}{% - \ltx@space\ltx@space mag = % - \zref@extract{thepage\the\count@}{mag}% - \noexpand\MessageBreak - \ZREF@pl@ListEntry{paperwidth}% - \ZREF@pl@ListEntry{paperheight}% - \ZREF@pl@ListEntry{stockwidth}% - \ZREF@pl@ListEntry{stockheight}% - \ZREF@pl@ListEntry{mediawidth}% - \ZREF@pl@ListEntry{mediaheight}% - \ZREF@pl@ListEntry{pdfpagewidth}% - \ZREF@pl@ListEntry{pdfpageheight}% - \ZREF@pl@ListEntry{pdfhorigin}% - \ZREF@pl@ListEntry{pdfvorigin}% - \ZREF@pl@ListEntry{hoffset}% - \ZREF@pl@ListEntry{voffset}% - \ZREF@pl@ListEntry{topmargin}% - \ZREF@pl@ListEntry{oddsidemargin}% - \ZREF@pl@ListEntry{evensidemargin}% - \ZREF@pl@ListEntry{textwidth}% - \ZREF@pl@ListEntry{textheight}% - \ZREF@pl@ListEntry{headheight}% - \ZREF@pl@ListEntry{headsep}% - \ZREF@pl@ListEntry{footskip}% - \ZREF@pl@ListEntry{marginparwidth}% - \ZREF@pl@ListEntry{marginparsep}% - \ZREF@pl@ListEntry{columnwidth}% - \ZREF@pl@ListEntry{columnsep}% - \ZREF@pl@ListEntry{trimedge}% - \ZREF@pl@ListEntry{spinemargin}% - \ZREF@pl@ListEntry{foremargin}% - \ZREF@pl@ListEntry{trimtop}% - \ZREF@pl@ListEntry{uppermargin}% - \ZREF@pl@ListEntry{headmargin}% - }% - }% - }\x - \ifnum\ZREF@page@max>\count@ - \advance\count@ by\ltx@one - \else - \expandafter\ltx@gobble - \fi - \ZREF@pl@ListPage -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@pl@ListEntry} -% \begin{macrocode} -\def\ZREF@pl@ListEntry#1{% - \zref@ifpropundefined{#1}{% - }{% - \zref@ifrefcontainsprop{thepage\the\count@}{#1}{% - \ltx@space\ltx@space#1 = % - \zref@extract{thepage\the\count@}{#1}sp = % - \the\dimexpr\zref@extract{thepage\the\count@}{#1}sp\relax - \noexpand\MessageBreak - }{}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\AfterLastShipout{% - \ZREF@pl@AfterLastShipout -} -% \end{macrocode} -% -% \begin{macrocode} -%</pagelayout> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{pageattr}} -% -% \begin{macrocode} -%<*pageattr> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-pageattr}% - [2018/11/21 v2.27 Module pageattr for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% \begin{macrocode} -\RequirePackage{ifluatex}[2010/03/01] -% \end{macrocode} -% -% \begin{macrocode} -\ifluatex - \ifnum\luatexversion<39 % - \else - \begingroup - \escapechar=-1 % - \def\ZREF@temp#1{% - \ltx@IfUndefined{\string#1}{% - \let#1\ltx@undefined - \directlua{% - if tex.enableprimitives then % - tex.enableprimitives('', {'\string#1'})% - end% - }% - \ltx@ifundefined{\string#1}{% - }{% - \global#1=#1% - \@PackageInfoNoLine{zref-pageattr}{% - \string#1 enabled% - }% - }% - }{}% - }% - \ZREF@temp\pdfpageattr - \ZREF@temp\pdfpagesattr - \endgroup - \fi -\fi -% \end{macrocode} -% -% \begin{macrocode} -\let\ZREF@temp=N% -\ltx@IfUndefined{pdfpageattr}{% - \@PackageInfoNoLine{zref-pageattr}{% - \string\pdfpageattr\space is not available% - }% - \def\zref@pdfpageattr#1{}% - \def\zref@pdfpageattr@used#1{}% -}{% - \RequirePackage{zref-thepage}[2018/11/21]% - \zref@newprop*{pdfpageattr}[]{\zref@hex{\the\pdfpageattr}}% - \zref@addprop{thepage}{pdfpageattr}% - \let\ZREF@temp=Y% -} -\ltx@IfUndefined{pdfpagesattr}{% - \@PackageInfoNoLine{zref-pageattr}{% - \string\pdfpagesattr\space is not available% - }% - \def\zref@pdfpagesattr{}% - \def\zref@pdfpagesattr@used{}% -}{% - \RequirePackage{zref-lastpage}[2018/11/21]% - \zref@newprop*{pdfpagesattr}[]{\zref@hex{\the\pdfpagesattr}}% - \zref@addprop{LastPage}{pdfpagesattr}% - \let\ZREF@temp=Y% -}% -% \end{macrocode} -% \begin{macrocode} -\ifx\ZREF@temp N% - \expandafter\endinput -\fi -% \end{macrocode} -% \begin{macrocode} -\RequirePackage{zref-abspage}[2018/11/21] -\RequirePackage{atveryend}[2010/03/24] -\RequirePackage{pdftexcmds}[2010/04/01] -\let\ZREF@temp=Y% -\ltx@IfUndefined{pdf@escapehex}{\let\ZREF@temp=N}{} -\ltx@IfUndefined{pdf@unescapehex}{\let\ZREF@temp=N}{} -\ifx\ZREF@temp N% - \let\zref@hex\ltx@firstofone - \let\zref@unhex\ltx@firstofone -\else - \let\zref@hex\pdf@escapehex - \let\zref@unhex\pdf@unescapehex -\fi -% \end{macrocode} -% -% \begin{macro}{\ifZREF@pa@list} -% \begin{macrocode} -\ltx@newif\ifZREF@pa@list -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@listpageattr} -% \begin{macrocode} -\ZREF@IfDefinable\zlistpageattr\def{% - {\ZREF@pa@listtrue}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@pa@AfterLastShipout} -% \begin{macrocode} -\def\ZREF@pa@AfterLastShipout{% - \ifZREF@pa@list - \edef\ZREF@page@max{\the\value{abspage}}% - \ltx@ifundefined{ZREF@org@testdef}{% - \let\ZREF@org@testdef\@testdef - \def\@testdef##1##2##3{% - \ZREF@org@testdef{##1}{##2}{##3}% - \def\ZREF@temp{##1}% - \ifx\ZREF@temp\ZREF@RefPrefix - \expandafter\xdef\csname##1@##2\endcsname{##3}% - \fi - }% - }{}% - \AtVeryEndDocument{\ZREF@pa@AtVeryEnd}% - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@pa@AtVeryEnd} -% \begin{macrocode} -\ltx@IfUndefined{pdfpageattr}{% - \def\ZREF@pa@AtVeryEnd{}% -}{% - \def\ZREF@pa@AtVeryEnd{% - \begingroup - \toks@{List of \ltx@backslashchar pdfpageattr:\MessageBreak}% - \count@=1 % - \ZREF@pa@ListPage - \edef\x{\endgroup - \noexpand\@PackageInfoNoLine{zref-pageattr}{% - \the\toks@ - }% - }% - \x - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@pageattr} -% \begin{macrocode} -\def\zref@pageattr#1{% - \zref@unhex{% - \zref@extract{thepage\ZREF@number{#1}}{pdfpageattr}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@pageattr@used} -% \begin{macrocode} -\ZREF@Robust\def\zref@pageattr@used#1{% - \zref@refused{thepage\ZREF@number{#1}}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@pa@ListPage} -% \begin{macrocode} - \def\ZREF@pa@ListPage{% - \edef\x{% - \toks@={% - \the\toks@ - Page \the\count@:% - \noexpand\MessageBreak - \zref@ifrefundefined{thepage\the\count@}{}{% - <<\zref@pdfpageattr\count@>>% - \noexpand\MessageBreak - }% - }% - }\x - \ifnum\ZREF@page@max>\count@ - \advance\count@ by\ltx@one - \else - \expandafter\ltx@gobble - \fi - \ZREF@pa@ListPage - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\ltx@IfUndefined{pdfpagesattr}{% -}{% -% \end{macrocode} -% \begin{macro}{\zref@pdfpagesattr} -% \begin{macrocode} - \def\zref@pdfpagesattr{% - \zref@unhex{% - \zref@extract{LastPage}{pdfpagesattr}% - }% - }% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@pdfpagesattr@used} -% \begin{macrocode} - \ZREF@Robust\def\zref@pdfpagesattr@used{% - \zref@refused{LastPage}% - }% -% \end{macrocode} -% \end{macro} -% \begin{macrocode} - \ltx@LocalAppendToMacro\ZREF@pa@AtVeryEnd{% - \@PackageInfoNoLine{zref-pageattr}{% - \ltx@backslashchar pdfpagesattr:\MessageBreak - <<\zref@pdfpagesattr>>% - \MessageBreak - }% - }% -} -\AfterLastShipout{% - \ZREF@pa@AfterLastShipout -} -% \end{macrocode} -% \begin{macrocode} -%</pageattr> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{marks}} -% -% \begin{macrocode} -%<*marks> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-marks}% - [2018/11/21 v2.27 Module marks for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% \begin{macrocode} -\newcommand*{\zref@marks@register}[3][]{% - \edef\ZREF@TempName{#1}% - \edef\ZREF@TempNum{\ZREF@number{#2}}% - \ifnum\ZREF@TempNum<\ltx@zero % - \PackageError\ZREF@name{% - \string\zref@marks@register\ltx@space is called with invalid% - \MessageBreak - marks register number (\ZREF@TempNum)% - }{% - Use `0' or the command, defined by \string\newmarks.\MessageBreak - \@ehc - }% - \else - \ifx\ZREF@TempName\ltx@empty - \edef\ZREF@TempName{mark\romannumeral\ZREF@TempNum}% - \else - \edef\ZREF@TempName{marks\ZREF@TempName}% - \fi - \ZREF@MARKS@DefineProp{top}% - \ZREF@MARKS@DefineProp{first}% - \ZREF@MARKS@DefineProp{bot}% - \kv@parse{#3}{% - \ifx\kv@value\relax - \def\kv@value{top,first,bot}% - \fi - \edef\ZREF@temp{\expandafter\ltx@car\kv@key X\@nil}% - \ifx\ZREF@temp\ZREF@STAR - \edef\kv@key{\expandafter\ltx@cdr\kv@key\@nil}% - \zref@newlist\kv@key - \fi - \expandafter\comma@parse\expandafter{\kv@value}{% - \ifcase0\ifx\comma@entry\ZREF@NAME@top 1\else - \ifx\comma@entry\ZREF@NAME@first 1\else - \ifx\comma@entry\ZREF@NAME@bot 1\fi\fi\fi\ltx@space - \PackageWarning{zref-marks}{% - Use `top', `first' or `bot' for the list values% - \MessageBreak - in the third argument of \string\zref@marks@register.% - \MessageBreak - Ignoring unkown value `\comma@entry'% - }% - \else - \zref@addprop{\kv@key}{\comma@entry\ZREF@TempName}% - \fi - \ltx@gobble - }% - \ltx@gobbletwo - }% - \fi -} -\def\ZREF@STAR{*} -\def\ZREF@NAME@top{top} -\def\ZREF@NAME@first{first} -\def\ZREF@NAME@bot{bot} -\def\ZREF@MARKS@DefineProp#1{% - \zref@ifpropundefined{#1\ZREF@TempName}{% - \ifnum\ZREF@TempNum=\ltx@zero - \begingroup - \edef\x{\endgroup - \noexpand\zref@newprop*{#1\ZREF@TempName}[]{% - \expandafter\noexpand\csname#1mark\endcsname - }% - }% - \x - \else - \begingroup - \edef\x{\endgroup - \noexpand\zref@newprop*{#1\ZREF@TempName}[]{% - \expandafter\noexpand\csname#1marks\endcsname - \ZREF@TempNum - }% - }% - \x - \fi - }{% - \PackageWarning{zref-marks}{% - \string\zref@marks@register\ltx@space does not generate the% - \MessageBreak - new property `#1\ZREF@TempName', because\MessageBreak - it is already defined% - }% - }% -} -% \end{macrocode} -% \begin{macrocode} -%</marks> -% \end{macrocode} -% -% \subsection{Module \xmodule{runs}} -% -% This module does not use the label-reference-system. -% The reference changes with each \hologo{LaTeX}~run and would -% force a rerun warning always. -% \begin{macrocode} -%<*runs> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-runs}% - [2018/11/21 v2.27 Module runs for zref (HO)]% -% \end{macrocode} -% -% \begin{macro}{\zruns} -% \begin{macrocode} -\providecommand*{\zruns}{0}% -\AtBeginDocument{% - \edef\zruns{\number\numexpr\zruns+1}% - \begingroup - \def\on@line{}% - \PackageInfo{zref-runs}{LaTeX runs: \zruns}% - \if@filesw - \immediate\write\@mainaux{% - \string\gdef\string\zruns{\zruns}% - }% - \fi - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</runs> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{perpage}} -% -% \begin{macrocode} -%<*perpage> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-perpage}% - [2018/11/21 v2.27 Module perpage for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% This module resets a counter at page boundaries. -% Because of the asynchronous output routine -% page counter properties cannot be asked directly, -% references are necessary. -% -% For detecting changed pages module \xmodule{abspage} -% is loaded. -% \begin{macrocode} -\RequirePackage{zref-abspage}[2018/11/21] -% \end{macrocode} -% -% We group the properties for the needed references -% in the property list |perpage|. The property |pagevalue| -% records the correct value of the page counter. -% \begin{macrocode} -\ZREF@NewPropPageValue -\zref@newlist{perpage} -\zref@addprops{perpage}{abspage,page,pagevalue} -% \end{macrocode} -% The page value, known by the reference mechanism, will be -% stored in counter |zpage|. -% \begin{macrocode} -\newcounter{zpage} -% \end{macrocode} -% Counter |zref@unique| helps in generating unique reference -% names. -% \begin{macrocode} -\zref@require@unique -% \end{macrocode} -% In order to be able to reset the counter, we hook here -% into \cs{stepcounter}. In fact two nested hooks are used -% to allow other packages to use the first hook at the beginning -% of \cs{stepcounter}. -% \begin{macrocode} -\let\ZREF@org@stepcounter\stepcounter -\def\stepcounter#1{% - \ifcsname @stepcounterhook@#1\endcsname - \csname @stepcounterhook@#1\endcsname - \fi - \ZREF@org@stepcounter{#1}% -} -% \end{macrocode} -% \cs{@stpelt} must be adapted due to the change in latex -% 2015-01, see https://github.com/ho-tex/oberdiek/issues/26 -% \begin{macrocode} -\let\ZREF@org@@stpelt\@stpelt -\def\@stpelt#1{% - \ifcsname ZREF@perpage@#1\endcsname - \begingroup - \let\stepcounter\ZREF@org@stepcounter - \ZREF@org@@stpelt{#1}% - \endgroup - \expandafter\ltx@gobbletwo - \fi - \ZREF@org@@stpelt{#1}% -} -% \end{macrocode} -% -% \begin{macro}{\zmakeperpage} -% Makro \cs{zmakeperpage} resets a counter at each page -% break. It uses the same syntax and semantics as -% \cs{MakePerPage} from package \xpackage{perpage} \cite{perpage}. -% The initial start value can be given by the optional -% argument. Default is one that means after the first -% \cs{stepcounter} on a new page the counter starts with -% one. -% \begin{macrocode} -\ZREF@IfDefinable\zmakeperpage\def{% - {% - \@ifnextchar[\ZREF@makeperpage@opt{\ZREF@@makeperpage[\ltx@zero]}% - }% -} -% \end{macrocode} -% \end{macro} -% We hook before the counter is incremented in \cs{stepcounter}, -% package \xpackage{perpage} afterwards. Thus a little -% calculation is necessary. -% \begin{macrocode} -\def\ZREF@makeperpage@opt[#1]{% - \begingroup - \edef\x{\endgroup - \noexpand\ZREF@@makeperpage[\number\numexpr#1-1\relax]% - }% - \x -} -% \end{macrocode} -% \begin{macrocode} -\def\ZREF@@makeperpage[#1]#2{% - \@ifundefined{@stepcounterhook@#2}{% - \expandafter\gdef\csname @stepcounterhook@#2\endcsname{}% - }{}% - \expandafter\gdef\csname ZREF@perpage@#2\endcsname{% - \ZREF@@perpage@step{#2}{#1}% - }% - \expandafter\g@addto@macro\csname @stepcounterhook@#2\endcsname{% - \ifcsname ZREF@perpage@#2\endcsname - \csname ZREF@perpage@#2\endcsname - \fi - }% -} -% \end{macrocode} -% \begin{macro}{\ZREF@@perpage@step} -% The heart of this module follows. -% \begin{macrocode} -\def\ZREF@@perpage@step#1#2{% -% \end{macrocode} -% First the reference is generated. -% \begin{macrocode} - \global\advance\c@zref@unique\ltx@one - \begingroup - \expandafter - \zref@labelbylist\expandafter{\thezref@unique}{perpage}% -% \end{macrocode} -% The \cs{expandafter} commands are necessary, because \cs{ZREF@temp} -% is also used inside of \cs{zref@labelbylist}. -% -% The evaluation of the reference follows. If the reference -% is not yet kwown, we use the page counter as approximation. -% \begin{macrocode} - \zref@ifrefundefined\thezref@unique{% - \global\c@zpage=\c@page - \global\let\thezpage\thepage - \expandafter\xdef\csname ZREF@abspage@#1\endcsname{% - \number\c@abspage - }% - }{% -% \end{macrocode} -% The reference is used to set \cs{thezpage} and counter |zpage|. -% \begin{macrocode} - \global\c@zpage=\zref@extract\thezref@unique{pagevalue}\relax - \xdef\thezpage{\noexpand\zref@extract{\thezref@unique}{page}}% - \expandafter\xdef\csname ZREF@abspage@#1\endcsname{% - \zref@extractdefault\thezref@unique - {abspage}{\number\c@abspage}% - }% - }% -% \end{macrocode} -% Page changes are detected by a changed absolute page number. -% \begin{macrocode} - \expandafter\ifx\csname ZREF@abspage@#1\expandafter\endcsname - \csname ZREF@currentabspage@#1\endcsname - \else - \global\csname c@#1\endcsname=#2\relax - \global\expandafter\let - \csname ZREF@currentabspage@#1\expandafter\endcsname - \csname ZREF@abspage@#1\endcsname - \fi - \endgroup -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zunmakeperpage} -% Macro \cs{zunmakeperpage} cancels the effect of \cs{zmakeperpage}. -% \begin{macrocode} -\ZREF@IfDefinable\zunmakeperpage\def{% - #1{% - \global\expandafter - \let\csname ZREF@perpage@#1\endcsname\@undefined - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</perpage> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{titleref}} -% -% \begin{macrocode} -%<*titleref> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-titleref}% - [2018/11/21 v2.27 Module titleref for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -\RequirePackage{gettitlestring}[2009/12/08] -% \end{macrocode} -% -% \subsubsection{Implementation} -% \begin{macrocode} -\RequirePackage{keyval} -% \end{macrocode} -% -% This module makes section and caption titles available -% for the reference system. It uses some of the ideas -% of package \xpackage{nameref} and \xpackage{titleref}. -% -% Now we can add the property \verb|title| is added to -% the main property list. -% \begin{macrocode} -\ZREF@NewPropTitle -\zref@addprop\ZREF@mainlist{title}% -% \end{macrocode} -% -% The title strings go into the \xfile{.aux} file, thus -% they need some kind of protection. -% Package \xpackage{titleref} uses a protected expansion -% method. The advantage is that this can be used to -% cleanup the string and to remove \cs{label}, \cs{index} -% and other macros unwanted for referencing. -% But there is the risk that fragile stuff can break. -% -% Therefore package \xpackage{nameref} does not expand -% the string. Thus the entries can safely be written to -% the \xfile{.aux} file. But potentially dangerous -% macros such as \cs{label} remain in the string and -% can cause problems when using the string in references. -% -% \begin{macro}{\ifzref@titleref@expand} -% The switch \cs{ifzref@titleref@expand} distinguishes -% between the both methods. Package \xpackage{nameref}'s -% behaviour is achieved by setting the switch to false, -% otherwise \xpackage{titleref}'s expansion is used. -% Default is false. -% \begin{macrocode} -\newif\ifzref@titleref@expand -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@titleref@hook} -% The hook \cs{ZREF@titleref@hook} allows to extend -% the cleanup for the expansion method. Thus -% unnecessary macros can be removed or dangerous commands -% removed. The hook is executed before the expansion of -% \cs{zref@titleref@current}. -% \begin{macrocode} -\let\ZREF@titleref@hook\ltx@empty -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zref@titleref@cleanup} -% The hook should not be used directly, instead we provide the -% macro \cs{zref@titleref@cleanup} to add stuff to the hook -% and prevents that a previous non-empty content is not discarded -% accidently. -% \begin{macrocode} -\ZREF@Robust\def\zref@titleref@cleanup#1{% - \begingroup - \toks@\expandafter{% - \ZREF@titleref@hook - #1% - }% - \expandafter\endgroup - \expandafter\def\expandafter\ZREF@titleref@hook\expandafter{% - \the\toks@ - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ifzref@titleref@stripperiod} -% Sometimes a title contains a period at the end. -% Package \xpackage{nameref} removes this. This behaviour -% is controlled by the switch \cs{ifzref@titleref@stripperiod} -% and works regardless of the setting of option \xoption{expand}. -% Period stripping is the default. -% \begin{macrocode} -\newif\ifzref@titleref@stripperiod -\zref@titleref@stripperiodtrue -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@titleref@setcurrent} -% Macro \cs{zref@titleref@setcurrent} sets a new current title -% stored in \cs{zref@titleref@current}. Some cleanup and -% expansion is performed that can be controlled by the -% previous switches. -% \begin{macrocode} -\ZREF@Robust\def\zref@titleref@setcurrent#1{% - \ifzref@titleref@expand - \GetTitleStringExpand{#1}% - \else - \GetTitleStringNonExpand{#1}% - \fi - \edef\zref@titleref@current{% - \detokenize\expandafter{\GetTitleStringResult}% - }% - \ifzref@titleref@stripperiod - \edef\zref@titleref@current{% - \expandafter\ZREF@stripperiod\zref@titleref@current - \ltx@empty.\ltx@empty\@nil - }% - \fi -}% -\GetTitleStringDisableCommands{% - \ZREF@titleref@hook -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@stripperiod} -% If \cs{ZREF@stripperiod} is called, the argument consists of -% space tokens and tokens with catcode 12 (other), because -% of \hologo{eTeX}'s \cs{detokenize}. -% \begin{macrocode} -\def\ZREF@stripperiod#1.\ltx@empty#2\@nil{#1}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{User interface} -% -% \begin{macro}{\ztitlerefsetup} -% The behaviour of module \xmodule{titleref} is controlled -% by switches and a hook. They can be set by \cs{ztitlerefsetup} -% with a key value interface, provided by package \xpackage{keyval}. -% Also the current title can be given explicitly by the key -% \verb|title|. -% \begin{macrocode} -\define@key{ZREF@TR}{expand}[true]{% - \csname zref@titleref@expand#1\endcsname -}% -\define@key{ZREF@TR}{stripperiod}[true]{% - \csname zref@titleref@stripperiod#1\endcsname -}% -\define@key{ZREF@TR}{cleanup}{% - \zref@titleref@cleanup{#1}% -}% -\define@key{ZREF@TR}{title}{% - \def\zref@titleref@current{#1}% -}% -\ZREF@IfDefinable\ztitlerefsetup\def{% - {\kvsetkeys{ZREF@TR}}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ztitleref} -% The user command \cs{ztitleref} references the title. -% For safety \cs{label} is disabled to prevent multiply -% defined references. -% \begin{macrocode} -\ZREF@IfDefinable\ztitleref\def{% - {\zref@wrapper@babel\ZREF@titleref}% -}% -\def\ZREF@titleref#1{% - \begingroup - \zref@refused{#1}% - \let\label\ltx@gobble - \zref@extract{#1}{title}% - \endgroup -}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Patches for section and caption commands} -% -% The section and caption macros are patched to extract the -% title data. -% -% Captions of figures and tables. -% \begin{macrocode} -\AtBeginDocument{% - \ZREF@patch{@caption}{% - \long\def\@caption#1[#2]{% - \zref@titleref@setcurrent{#2}% - \ZREF@org@@caption{#1}[{#2}]% - }% - }% -% \end{macrocode} -% -% Section commands without star. The title version for the -% table of contents is used because it is usually shorter and -% more robust. -% \begin{macrocode} - \ZREF@patch{@part}{% - \def\@part[#1]{% - \zref@titleref@setcurrent{#1}% - \ZREF@org@@part[{#1}]% - }% - }% - \ZREF@patch{@chapter}{% - \def\@chapter[#1]{% - \zref@titleref@setcurrent{#1}% - \ZREF@org@@chapter[{#1}]% - }% - }% - \ZREF@patch{@sect}{% - \def\@sect#1#2#3#4#5#6[#7]{% - \zref@titleref@setcurrent{#7}% - \ZREF@org@@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]% - }% - }% -% \end{macrocode} -% The star versions of the section commands. -% \begin{macrocode} - \ZREF@patch{@spart}{% - \def\@spart#1{% - \zref@titleref@setcurrent{#1}% - \ZREF@org@@spart{#1}% - }% - }% - \ZREF@patch{@schapter}{% - \def\@schapter#1{% - \zref@titleref@setcurrent{#1}% - \ZREF@org@@schapter{#1}% - }% - }% - \ZREF@patch{@ssect}{% - \def\@ssect#1#2#3#4#5{% - \zref@titleref@setcurrent{#5}% - \ZREF@org@@ssect{#1}{#2}{#3}{#4}{#5}% - }% - }% -% \end{macrocode} -% -% \subsubsection{Environment \textsf{description}} -% -% \begin{macrocode} - \ZREF@patch{descriptionlabel}{% - \def\descriptionlabel#1{% - \zref@titleref@setcurrent{#1}% - \ZREF@org@descriptionlabel{#1}% - }% - }% -% \end{macrocode} -% -% \subsubsection{Class \xclass{memoir}} -% -% \begin{macrocode} - \@ifclassloaded{memoir}{% - \ltx@IfUndefined{ifheadnameref}{}{% - \def\@chapter[#1]#2{% - \ltx@IfUndefined{ch@pt@c}{% - \zref@titleref@setcurrent{#1}% - }{% - \ifx\ch@pt@c\ltx@empty - \zref@titleref@setcurrent{#2}% - \else - \def\NR@temp{#1}% - \ifx\NR@temp\ltx@empty - \expandafter\zref@titleref@setcurrent - \expandafter{\ch@pt@c}% - \else - \ifheadnameref - \zref@titleref@setcurrent{#1}% - \else - \expandafter\zref@titleref@setcurrent - \expandafter{\ch@pt@c}% - \fi - \fi - \fi - }% - \ZREF@org@@chapter[{#1}]{#2}% - }% - \ZREF@patch{M@sect}{% - \def\M@sect#1#2#3#4#5#6[#7][#8]{% - \ifheadnameref - \zref@titleref@setcurrent{#8}% - \else - \zref@titleref@setcurrent{#7}% - \fi - \ZREF@org@M@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}][{#8}]% - }% - }% - }% - }{}% -% \end{macrocode} -% -% \subsubsection{Class \xclass{beamer}} -% -% \begin{macrocode} - \@ifclassloaded{beamer}{% - \ZREF@patch{beamer@section}{% - \long\def\beamer@section[#1]{% - \zref@titleref@setcurrent{#1}% - \ZREF@org@beamer@section[{#1}]% - }% - }% - \ZREF@patch{beamer@subsection}{% - \long\def\beamer@subsection[#1]{% - \zref@titleref@setcurrent{#1}% - \ZREF@org@beamer@subsection[{#1}]% - }% - }% - \ZREF@patch{beamer@subsubsection}{% - \long\def\beamer@subsubsection[#1]{% - \zref@titleref@setcurrent{#1}% - \ZREF@org@beamer@subsubsection[{#1}]% - }% - }% - }{}% -% \end{macrocode} -% -% \subsubsection{Package \xpackage{titlesec}} -% -% \begin{macrocode} - \@ifpackageloaded{titlesec}{% - \ZREF@patch{ttl@sect@i}{% - \def\ttl@sect@i#1#2[#3]#4{% - \zref@titleref@setcurrent{#4}% - \ZREF@org@ttl@sect@i{#1}{#2}[{#3}]{#4}% - }% - }% - \ZREF@patch{ttl@straight@i}{% - \def\ttl@straight@i#1[#2]#3{% - \def\ZREF@temp{#2}% - \ifx\ZREF@temp\ltx@empty - \zref@titleref@setcurrent{#3}% - \else - \zref@titleref@setcurrent{#2}% - \fi - \ZREF@org@ttl@straight@i{#1}[{#2}]{#3}% - }% - }% - }{}% -% \end{macrocode} -% -% \subsubsection{Package \xpackage{longtable}} -% -% Package \xpackage{longtable}: some support for its \cs{caption}. -% However \cs{label} inside the caption is not supported. -% \begin{macrocode} - \@ifpackageloaded{longtable}{% - \ZREF@patch{LT@c@ption}{% - \def\LT@c@ption#1[#2]#3{% - \ZREF@org@LT@c@ption{#1}[{#2}]{#3}% - \zref@titleref@setcurrent{#2}% - }% - }% - }{}% -% \end{macrocode} -% -% \subsubsection{Package \xpackage{listings}} -% -% Package \xpackage{listings}: support for its caption. -% \begin{macrocode} - \@ifpackageloaded{listings}{% - \ZREF@patch{lst@MakeCaption}{% - \def\lst@MakeCaption{% - \ifx\lst@label\ltx@empty - \else - \expandafter\zref@titleref@setcurrent\expandafter{% - \lst@@caption - }% - \fi - \ZREF@org@lst@MakeCaption - }% - }% - }{}% -% \end{macrocode} -% -% \subsubsection{Theorems} -% -% \begin{macrocode} - \ZREF@patch{@opargbegintheorem}{% - \def\@opargbegintheorem#1#2#3{% - \zref@titleref@setcurrent{#3}% - \ZREF@org@@opargbegintheorem{#1}{#2}{#3}% - }% - }% - \@ifpackageloaded{amsthm}{% - \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 - \ZREF@patch{@begintheorem}{% - \def\@begintheorem#1#2[#3]{% - \zref@titleref@setcurrent{#3}% - \ZREF@org@@begintheorem{#1}{#2}[{#3}]% - }% - }% - \fi - }{}% -% \end{macrocode} -% -% \begin{macrocode} -} -% \end{macrocode} -% -% \begin{macrocode} -%</titleref> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{xr}} -% -% \begin{macrocode} -%<*xr> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-xr}% - [2018/11/21 v2.27 Module xr for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% \begin{macrocode} -\RequirePackage{keyval} -\RequirePackage{kvoptions}[2010/02/22] -% \end{macrocode} -% -% We declare property |url|, because this is added, -% if a reference is imported and has not already set this field. -% Or if |hyperref| is used, then this property can be asked. -% \begin{macrocode} -\zref@newprop{url}{}% -\zref@newprop{urluse}{}% -% \end{macrocode} -% \begin{macrocode} -\zref@newprop{externaldocument}{}% -% \end{macrocode} -% -% Most code, especially the handling of the \xfile{.aux} -% files are taken from David Carlisle's \xpackage{xr} package. -% Therefore I drop the documentation for these macros here. -% -% \begin{macro}{\zref@xr@ext} -% If the URL is not specied, then assume -% processed file with a guessed extension. -% Use the setting of \xpackage{hyperref} if available. -% \begin{macrocode} -\providecommand*{\zref@xr@ext}{% - \ltx@ifundefined{XR@ext}{pdf}{\XR@ext}% -}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ifZREF@xr@zreflabel} -% The use of the star form of \cs{zexternaldocument} -% is remembered in the switch \cs{ifZREF@xr@zreflabel}. -% \begin{macrocode} -\newif\ifZREF@xr@zreflabel -% \end{macrocode} -% \end{macro} -% \begin{macrocode} -\SetupKeyvalOptions{% - family=ZREF@XR,% - prefix=ZREF@xr@% -} -\DeclareBoolOption[true]{tozreflabel} -\DeclareBoolOption[false]{toltxlabel} -\DeclareBoolOption{verbose} -\define@key{ZREF@XR}{ext}{% - \def\zref@xr@{#1}% -} -\DeclareBoolOption[false]{urluse} -% \end{macrocode} -% \begin{macro}{\zxrsetup} -% \begin{macrocode} -\newcommand*{\zxrsetup}{% - \kvsetkeys{ZREF@XR}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@xr@URL} -% \begin{macrocode} -\newcount\ZREF@xr@URL -\ZREF@xr@URL=\ltx@zero -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@xr@AddURL} -% \begin{macrocode} -\def\ZREF@xr@AddURL#1{% - \begingroup - \def\ZREF@temp{#1}% - \count@=\ltx@one - \ZREF@xr@@AddUrl - \endgroup -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@xr@@AddUrl} -% \begin{macrocode} -\def\ZREF@xr@@AddUrl{% - \ifnum\count@>\ZREF@xr@URL - \global\advance\ZREF@xr@URL by\ltx@one - \xdef\ZREF@xr@theURL{\romannumeral\ZREF@xr@URL}% - \global\expandafter\let - \csname Z@U@\ZREF@xr@theURL\endcsname\ZREF@temp - \@PackageInfo{zref-xr}{% - \ltx@backslashchar Z@U@\ZREF@xr@theURL:\MessageBreak - \ZREF@temp\MessageBreak - }% - \else - \expandafter - \ifx\csname Z@U@\romannumeral\count@\endcsname\ZREF@temp - \xdef\ZREF@xr@theURL{\romannumeral\count@}% - \else - \expandafter\expandafter\expandafter\ZREF@xr@@AddUrl - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zexternaldocument} -% In its star form it looks for \cs{newlabel}, -% otherwise for \cs{zref@newlabel}. -% Later we -% will read \xfile{.aux} files that expects -% |@| to have catcode 11 (letter). -% \begin{macrocode} -\ZREF@IfDefinable\zexternaldocument\def{% - {% - \ZREF@NewPropAnchor - \ZREF@NewPropTitle - \begingroup - \csname @safe@actives@true\endcsname - \makeatletter - \@ifstar{% - \ZREF@xr@zreflabelfalse - \@testopt\ZREF@xr@externaldocument{}% - }{% - \ZREF@xr@zreflabeltrue - \@testopt\ZREF@xr@externaldocument{}% - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% If the \cs{include} featuer was used, there can be -% several \xfile{.aux} files. These files are read -% one after another, especially they are not recursively -% read in order to save read registers. Thus it can -% happen that the read order of the newlabel commands -% differs from \hologo{LaTeX}'s order using \cs{input}. -% -% \begin{macro}{\ZREF@xr@externaldocument} -% It reads the remaining arguments. \cs{newcommand} -% comes in handy for the optional argument. -% \begin{macrocode} -\def\ZREF@xr@externaldocument[#1]#2{% - \def\ZREF@xr@prefix{#1}% - \let\ZREF@xr@filelist\ltx@empty - \edef\ZREF@xr@externalfile{#2}% - \edef\ZREF@xr@file{\ZREF@xr@externalfile.aux}% - \filename@parse{#2}% - \@testopt\ZREF@xr@graburl{#2.\zref@xr@ext}% -}% -\def\ZREF@xr@graburl[#1]{% - \edef\ZREF@xr@url{#1}% - \ifZREF@xr@urluse - \expandafter\ZREF@xr@AddURL\expandafter{\ZREF@xr@url}% - \expandafter\def\expandafter\ZREF@xr@url - \expandafter{\csname Z@U@\ZREF@xr@theURL\endcsname}% - \fi - \ZREF@xr@checkfile - \endgroup -}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@xr@processfile} -% We follow \xpackage{xr} here, \cs{IfFileExists} offers -% a nicer test, but we have to open the file anyway. -% \begin{macrocode} -\def\ZREF@xr@checkfile{% - \openin\@inputcheck\ZREF@xr@file\relax - \ifeof\@inputcheck - \PackageWarning{zref-xr}{% - File `\ZREF@xr@file' not found or empty,\MessageBreak - labels not imported% - }% - \else - \PackageInfo{zref-xr}{% - Label \ifZREF@xr@zreflabel (zref) \fi - import from `\ZREF@xr@file'% - }% - \def\ZREF@xr@found{0}% - \def\ZREF@xr@ignored@empty{0}% - \def\ZREF@xr@ignored@zref{0}% - \def\ZREF@xr@ignored@ltx{0}% - \ZREF@xr@processfile - \closein\@inputcheck - \begingroup - \let\on@line\ltx@empty - \PackageInfo{zref-xr}{% - Statistics for `\ZREF@xr@file':\MessageBreak - \ZREF@xr@found\space - \ifZREF@xr@zreflabel zref\else LaTeX\fi\space - label(s) found% - \ifnum\ZREF@xr@ignored@empty>0 % - ,\MessageBreak - \ZREF@xr@ignored@empty\space empty label(s) ignored% - \fi - \ifnum\ZREF@xr@ignored@zref>0 % - ,\MessageBreak - \ZREF@xr@ignored@zref\space - duplicated zref label(s) ignored% - \fi - \ifnum\ZREF@xr@ignored@ltx>0 % - ,\MessageBreak - \ZREF@xr@ignored@ltx\space - duplicated latex label(s) ignored% - \fi - }% - \endgroup - \fi - \ifx\ZREF@xr@filelist\ltx@empty - \else - \edef\ZREF@xr@file{% - \expandafter\ltx@car\ZREF@xr@filelist\@nil - }% - \edef\ZREF@xr@filelist{% - \expandafter\ltx@cdr\ZREF@xr@filelist\ltx@empty\@nil - }% - \expandafter\ZREF@xr@checkfile - \fi -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@xr@processfile} -% \begin{macrocode} -\def\ZREF@xr@processfile{% - \read\@inputcheck to\ZREF@xr@line - \expandafter\ZREF@xr@processline\ZREF@xr@line..\ZREF@nil - \ifeof\@inputcheck - \else - \expandafter\ZREF@xr@processfile - \fi -}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@xr@processline} -% The most work must be done for analyzing the -% arguments of \cs{newlabel}. -% \begin{macrocode} -\long\def\ZREF@xr@processline#1#2#3\ZREF@nil{% - \def\x{#1}% - \toks@{#2}% - \ifZREF@xr@zreflabel - \ifx\x\ZREF@xr@zref@newlabel - \expandafter - \ZREF@xr@process@zreflabel\ZREF@xr@line...\ZREF@nil - \fi - \else - \ifx\x\ZREF@xr@newlabel - \expandafter - \ZREF@xr@process@label\ZREF@xr@line...[]\ZREF@nil - \fi - \fi - \ifx\x\ZREF@xr@@input - \edef\ZREF@xr@filelist{% - \etex@unexpanded\expandafter{\ZREF@xr@filelist}% - {\filename@area\the\toks@}% - }% - \fi -}% -\def\ZREF@xr@process@zreflabel\zref@newlabel#1#2#3\ZREF@nil{% - \edef\ZREF@xr@refname{Z@R@\ZREF@xr@prefix#1}% - \edef\ZREF@xr@found{\the\numexpr\ZREF@xr@found+1\relax}% - \def\x{#2}% - \edef\ZREF@xr@tempname{$temp$}% - \edef\ZREF@xr@temprefname{Z@R@\ZREF@xr@tempname}% - \let\ZREF@xr@list\x - \ifx\ZREF@xr@list\ltx@empty - \PackageWarningNoLine{zref-xr}{% - Label `#1' without properties ignored\MessageBreak - in file `\ZREF@xr@file'% - }% - \edef\ZREF@xr@ignored@empty{% - \the\numexpr\ZREF@xr@ignored@empty+1\relax - }% - \else - \expandafter\ZREF@xr@checklist\x\ZREF@nil - \expandafter\let\csname\ZREF@xr@temprefname\endcsname\x - \expandafter\ltx@LocalAppendToMacro - \csname\ZREF@xr@temprefname\expandafter\endcsname - \expandafter{% - \expandafter\externaldocument\expandafter{% - \ZREF@xr@externalfile - }% - }% - \ZREF@xr@urlcheck\ZREF@xr@tempname - \ifZREF@xr@tozreflabel - \@ifundefined{\ZREF@xr@refname}{% - \ifZREF@xr@verbose - \PackageInfo{zref-xr}{% - Import to zref label `\ZREF@xr@tempname#1'% - }% - \fi - \global\expandafter - \let\csname\ZREF@xr@refname\expandafter\endcsname - \csname\ZREF@xr@temprefname\endcsname - }{% - \ZREF@xr@zref@ignorewarning{\ZREF@xr@prefix#1}% - }% - \fi - \ifZREF@xr@toltxlabel - \ZREF@xr@tolabel{\ZREF@xr@tempname}{\ZREF@xr@prefix#1}% - \fi - \fi -}% -\def\ZREF@xr@process@label\newlabel#1#2#3[#4]#5\ZREF@nil{% - \def\ZREF@xr@refname{Z@R@\ZREF@xr@prefix#1}% - \edef\ZREF@xr@found{\the\numexpr\ZREF@xr@found+1\relax}% - \def\x{#2}% - \edef\ZREF@xr@tempname{$temp$}% - \edef\ZREF@xr@temprefname{Z@R@\ZREF@xr@tempname}% - \expandafter\ZREF@xr@scanparams - \csname\ZREF@xr@temprefname\expandafter\endcsname - \x{}{}{}{}{}\ZREF@nil - \ifx\\#4\\% - \else - % ntheorem knows an optional argument at the end of \newlabel - \ZREF@NewPropTheotype - \expandafter\ltx@LocalAppendToMacro - \csname\ZREF@xr@temprefname\endcsname{\theotype{#4}}% - \fi - \expandafter\ltx@LocalAppendToMacro - \csname\ZREF@xr@temprefname\expandafter\endcsname\expandafter{% - \expandafter\externaldocument\expandafter{% - \ZREF@xr@externalfile - }% - }% - \ZREF@xr@urlcheck\ZREF@xr@tempname - \ifZREF@xr@tozreflabel - \@ifundefined{\ZREF@xr@refname}{% - \ifZREF@xr@verbose - \PackageInfo{zref-xr}{% - Import to zref label `\ZREF@xr@prefix#1'% - }% - \fi - \global\expandafter - \let\csname\ZREF@xr@refname\expandafter\endcsname - \csname\ZREF@xr@temprefname\endcsname - }{% - \ZREF@xr@zref@ignorewarning{\ZREF@xr@prefix#1}% - }% - \fi - \ifZREF@xr@toltxlabel - \ZREF@xr@tolabel{\ZREF@xr@tempname}{\ZREF@xr@prefix#1}% - \fi -} -\def\ZREF@xr@zref@newlabel{\zref@newlabel}% -\def\ZREF@xr@newlabel{\newlabel}% -\def\ZREF@xr@@input{\@input}% -\def\ZREF@xr@relax{\relax}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@xr@tolabel} -% \begin{macrocode} -\def\ZREF@xr@tolabel#1#2{% - \ifZREF@xr@verbose - \PackageInfo{zref-xr}{% - Import to LaTeX label `#2'% - }% - \fi - \zref@wrapper@unexpanded{% - \expandafter\xdef\csname r@#2\endcsname{% - {% - \ltx@ifundefined{M@TitleReference}{% - \ltx@ifundefined{TR@TitleReference}{% - \zref@extractdefault{#1}{default}{}% - }{% - \noexpand\TR@TitleReference - {\zref@extractdefault{#1}{default}{}}% - {\zref@extractdefault{#1}{title}{}}% - }% - }{% - \noexpand\M@TitleReference - {\zref@extractdefault{#1}{default}{}}% - {\zref@extractdefault{#1}{title}{}}% - }% - }% - {\zref@extractdefault{#1}{page}{}}% - \ltx@ifpackageloaded{nameref}{% - {\zref@extractdefault{#1}{title}{}}% - {\zref@extractdefault{#1}{anchor}{}}% - \zref@ifrefcontainsprop{#1}{urluse}{% - {\zref@extractdefault{#1}{urluse}{}}% - }{% - {\zref@extractdefault{#1}{url}{}}% - }% - }{}% - }% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@xr@zref@ignorewarning} -% \begin{macrocode} -\def\ZREF@xr@zref@ignorewarning#1{% - \PackageWarningNoLine{zref-xr}{% - Zref label `#1' is already in use\MessageBreak - in file `\ZREF@xr@file'% - }% - \edef\ZREF@xr@ignored@zref{% - \the\numexpr\ZREF@xr@ignored@zref+1% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@xr@ltx@ignorewarning} -% \begin{macrocode} -\def\ZREF@xr@ltx@ignorewarning#1{% - \PackageWarningNoLine{zref-xr}{% - LaTeX label `#1' is already in use\MessageBreak - in file `\ZREF@xr@file'% - }% - \edef\ZREF@xr@ignored@ltx{% - \the\numexpr\ZREF@xr@ignored@ltx+1% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@xr@checklist} -% \begin{macrocode} -\def\ZREF@xr@checklist#1#2#3\ZREF@nil{% - \ifx\@undefined#1\relax - \expandafter\ZREF@xr@checkkey\string#1\@nil - \fi - \ifx\\#3\\% - \else - \ltx@ReturnAfterFi{% - \ZREF@xr@checklist#3\ZREF@nil - }% - \fi -}% -\def\ZREF@xr@checkkey#1#2\@nil{% - \zref@ifpropundefined{#2}{% - \zref@newprop{#2}{}% - }{}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@xr@scanparams} -% \begin{macrocode} -\def\ZREF@xr@scanparams#1#2#3#4#5#6#7\ZREF@nil{% - \let#1\ltx@empty - \ZREF@foundfalse - \ZREF@xr@scantitleref#1#2\TR@TitleReference{}{}\ZREF@nil - \ifZREF@found - \else - \ltx@LocalAppendToMacro#1{\default{#2}}% - \fi - % page - \ltx@LocalAppendToMacro#1{\page{#3}}% - % nameref title - \ifZREF@found - \else - \ifx\\#4\\% - \else - \def\ZREF@xr@temp{#4}% - \ifx\ZREF@xr@temp\ZREF@xr@relax - \else - \ltx@LocalAppendToMacro#1{\title{#4}}% - \fi - \fi - \fi - % anchor - \ifx\\#5\\% - \else - \ltx@LocalAppendToMacro#1{\anchor{#5}}% - \fi - \ifx\\#6\\% - \else - \ifZREF@xr@urluse - \ZREF@xr@AddURL{#6}% - \expandafter\ltx@LocalAppendToMacro\expandafter#1% - \expandafter{% - \expandafter\urluse\expandafter{% - \csname Z@U@\ZREF@xr@theURL\endcsname - }% - }% - \else - \ltx@LocalAppendToMacro#1{\url{#6}}% - \fi - \fi -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@xr@scantitleref} -% \begin{macrocode} -\def\ZREF@xr@scantitleref#1#2\TR@TitleReference#3#4#5\ZREF@nil{% - \ifx\\#5\\% - \else - \ltx@LocalAppendToMacro#1{% - \default{#3}% - \title{#4}% - }% - \ZREF@foundtrue - \fi -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@xr@urlcheck}% -% \begin{macrocode} -\def\ZREF@xr@urlcheck#1{% - \zref@ifrefcontainsprop{#1}{anchor}{% - \zref@ifrefcontainsprop{#1}{url}{% - }{% - \expandafter - \ltx@LocalAppendToMacro\csname Z@R@#1\expandafter\endcsname - \expandafter{% - \csname url\ifZREF@xr@urluse use\fi - \expandafter\endcsname\expandafter{\ZREF@xr@url}% - }% - }% - }{% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</xr> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{hyperref}} -% -% UNFINISHED :-( -% -% \begin{macrocode} -%<*hyperref> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-hyperref}% - [2018/11/21 v2.27 Module hyperref for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% \begin{macrocode} -\ZREF@NewPropAnchor -\zref@addprop\ZREF@mainlist{anchor}% -% \end{macrocode} -% -% \begin{macrocode} -%</hyperref> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{savepos}} -% -% Module \xmodule{savepos} provides an interface for -% \pdfTeX's \cmd{\pdfsavepos}, see the manual for -% \pdfTeX. -% -% \subsubsection{Identification} -% -% \begin{macrocode} -%<*savepos> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-savepos}% - [2018/11/21 v2.27 Module savepos for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% LuaTeX compatibility -% \begin{macrocode} -\ifx\pdfsavepos\@undefined - \let\pdfsavepos \savepos - \let\pdflastxpos \lastxpos - \let\pdflastypos \lastypos -\fi -% \end{macrocode} -% -% \subsubsection{Availability} -% -% First we check, whether the feature is available. -% \begin{macrocode} -\ltx@IfUndefined{pdfsavepos}{% - \PackageError\ZREF@name{% - \string\pdfsavepos\space is not supported.\MessageBreak - It is provided by pdfTeX (1.40) or XeTeX% - }\ZREF@UpdatePdfTeX - \endinput -}{}% -% \end{macrocode} -% In PDF mode we are done. However support for DVI mode -% was added later in version 1.40.0. In earlier versions -% \cs{pdfsavepos} is defined, but its execution raises -% an error. Note that \hologo{XeTeX} also provides \cs{pdfsavepos}. -% \begin{macrocode} -\RequirePackage{ifpdf} -\ifpdf -\else - \ltx@IfUndefined{pdftexversion}{% - }{% - \ifnum\pdftexversion<140 % - \PackageError\ZREF@name{% - \string\pdfsavepos\space is not supported in DVI mode% - \MessageBreak - of this pdfTeX version% - }\ZREF@UpdatePdfTeX - \expandafter\expandafter\expandafter\endinput - \fi - }% -\fi -% \end{macrocode} -% -% \subsubsection{Setup} -% -% \begin{macrocode} -\zref@newlist{savepos} -\zref@newprop*{posx}[0]{\the\pdflastxpos} -\zref@newprop*{posy}[0]{\the\pdflastypos} -\zref@addprops{savepos}{posx,posy} -% \end{macrocode} -% -% \subsubsection{User macros} -% -% \begin{macro}{\zref@savepos} -% \begin{macrocode} -\def\zref@savepos{% - \if@filesw - \pdfsavepos - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@zsavepos} -% \begin{macrocode} -\def\ZREF@zsavepos#1#2#3{% - \@bsphack - \if@filesw - \zref@savepos - #1{#3}{#2}% - \ltx@IfUndefined{TeXXeTstate}{% - }{% - \ifnum\TeXXeTstate=\ltx@zero - \else - \zref@savepos - \fi - }% - \fi - \@esphack -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zsavepos} -% The current location is stored in a reference with the -% given name. -% \begin{macrocode} -\ZREF@IfDefinable\zsavepos\def{% - {% - \ZREF@zsavepos\zref@labelbylist{savepos}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zsaveposx} -% \begin{macrocode} -\ZREF@IfDefinable\zsaveposx\def{% - {% - \ZREF@zsavepos\zref@labelbyprops{posx}% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\zsaveposy} -% \begin{macrocode} -\ZREF@IfDefinable\zsaveposy\def{% - {% - \ZREF@zsavepos\zref@labelbyprops{posy}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zposx} -% \begin{macro}{\zposy} -% The horizontal and vertical position are available by -% \cs{zposx} and \cs{zposy}. Do not rely on absolute -% positions. They differ in DVI and PDF mode of \pdfTeX. -% Use differences instead. The unit of the position numbers -% is sp. -% \begin{macrocode} -\newcommand*{\zposx}[1]{% - \zref@extract{#1}{posx}% -}% -\newcommand*{\zposy}[1]{% - \zref@extract{#1}{posy}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% Typically horizontal and vertical positions are used -% inside calculations. Therefore the extracting macros -% should be expandable and babel's patch is not applyable. -% -% Also it is in the responsibility of the user to marked -% used positions by \cs{zrefused} -% in order to notify \hologo{LaTeX} about undefined references. -% -% \begin{macro}{\ZREF@savepos@ok} -% \begin{macrocode} -\let\ZREF@savepos@ok=Y -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</savepos> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{abspos}} -% -% \subsubsection{Identification} -% -% \begin{macrocode} -%<*abspos> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-abspos}% - [2018/11/21 v2.27 Module abspos for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% \begin{macrocode} -\RequirePackage{zref-savepos}[2018/11/21] -\ifx\ZREF@savepos@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% \begin{macrocode} -\RequirePackage{zref-pagelayout}[2018/11/21] -\zref@addprop{savepos}{abspage} -% \end{macrocode} -% -% \begin{macrocode} -\RequirePackage{ifpdf}[2010/09/13] -% \end{macrocode} -% -% \begin{macro}{\zref@absposx} -% \begin{macrocode} -\newcommand*{\zref@absposx}[3]{% - \number - \expandafter\zref@absposnumx\expandafter{% - \number\zref@extractdefault{#1}{abspage}{0}% - }{#2}{#3}% - \ltx@space -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@absposy} -% \begin{macrocode} -\newcommand*{\zref@absposy}[3]{% - \number - \expandafter\zref@absposnumy\expandafter{% - \number\zref@extractdefault{#1}{abspage}{0}% - }{#2}{#3}% - \ltx@space -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@absposnumx} -% \begin{macrocode} -\newcommand*{\zref@absposnumx}[3]{% - \number -% \ifnum#1>\ltx@zero -% \zref@ifrefundefined{thepage#1}{% -% 0% -% }{% - \numexpr\ZREF@absposnum{thepage#1}{#2}{x}{#3}\relax -% }% -% \else -% 0% -% \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@absposnumy} -% \begin{macrocode} -\newcommand*{\zref@absposnumy}[3]{% - \number -% \ifnum#1>\ltx@zero -% \zref@ifrefundefined{thepage#1}{% -% 0% -% }{% - \numexpr\ZREF@absposnum{thepage#1}{#2}{y}{#3}\relax -% }% -% \else -% 0% -% \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@absposnum} -% \begin{macrocode} -\def\ZREF@absposnum#1#2#3#4{% - \ltx@ifundefined{ZREF@abspos@#2@#3@#4}{% - 0% - }{% - \csname ZREF@abspos@#2@#3@#4\endcsname{#1}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@def@absposx} -% \begin{macrocode} -\ZREF@Robust\def\zref@def@absposx#1{% - \zref@wrapper@babel{\ZREF@def@abspos{#1}\zref@absposx}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@def@absposy} -% \begin{macrocode} -\ZREF@Robust\def\zref@def@absposy#1{% - \zref@wrapper@babel{\ZREF@def@abspos{#1}\zref@absposy}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@def@absposnumx} -% \begin{macrocode} -\ZREF@Robust\def\zref@def@absposnumx#1{% - \zref@wrapper@babel{\ZREF@def@abspos{#1}\zref@absposnumx}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@def@absposnumy} -% \begin{macrocode} -\ZREF@Robust\def\zref@def@absposnumy#1{% - \zref@wrapper@babel{\ZREF@def@abspos{#1}\zref@absposnumy}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@def@abspos} -% \begin{macrocode} -\def\ZREF@def@absposnumy#1#2#3#4#5{% - \edef#1{#2{#3}{#4}{#5}}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@absposused} -% \begin{macrocode} -\ZREF@Robust\def\zref@absposused{% - \zref@wrapper@babel\ZREF@abspos@used -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@used} -% \begin{macrocode} -\def\ZREF@abspos@used#1{% - \zref@refused{#1}% - \zref@ifrefundefined{#1}{% - }{% - \begingroup - \edef\ZREF@temp{% - \zref@extractdefault{#1}{abspage}{0}% - }% - \ifnum\ZREF@temp>\ltx@zero - \zref@refused{thepage\ZREF@temp}% - \else - \@PackageError{zref-abspos}{% - \string\zref@pos@label@used\ltx@space - needs property `abspage'\MessageBreak - in label `#1'% - }\@ehc - \fi - \endgroup - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@absposnumused} -% \begin{macrocode} -\newcommand*{\zref@absposnumused}[1]{% - \ifnum#1>\ltx@zero - \zref@refused{thepage\number#1}% - \else - \@PackageError{zref-abspos}{% - Invalid absolute page number (#1)\MessageBreak - for \string\zref@pos@num@used.\MessageBreak - A positive integer is expected% - }\@ehc - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@ifabsposundefined} -% \begin{macrocode} -\def\zref@ifabsposundefined#1{% - \zref@ifrefundefined{#1}\ltx@firsttwo{% - \expandafter\zref@ifabsposnumundefined\expandafter{% - \number\zref@extractdefault{#1}{abspage}{0}% - }% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zref@ifabsposnumundefined} -% \begin{macrocode} -\def\zref@ifabsposnumundefined#1{% - \ifnum\ZREF@number{#1}>\ltx@zero - \zref@ifrefundefined{thepage#1}% - \ltx@firstoftwo\ltx@secondoftwo - \else - \expandafter\ltx@firstoftwo - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Media} -% -% \begin{macro}{\ZREF@abspos@media@width} -% \begin{macrocode} -\edef\ZREF@abspos@media@width{% - \ltx@ifundefined{pdfpagewidth}{% - \ltx@ifundefined{mediawidth}{% - \ltx@ifundefined{stockwidth}{% - paperwidth% - }{% - stockwidth% - }% - }{% - mediawidth% - }% - }{% - pdfpagewidth% - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@media@height} -% \begin{macrocode} -\edef\ZREF@abspos@media@height{% - \ltx@ifundefined{pdfpageheight}{% - \ltx@ifundefined{mediaheight}{% - \ltx@ifundefined{stockheight}{% - paperheight% - }{% - stockheight% - }% - }{% - mediaheight% - }% - }{% - \noexpand\ifcase\pdfpageheight - \ltx@ifundefined{stockheight}{% - paperheight% - }{% - stockheight% - }% - \noexpand\else - pdfpageheight% - \noexpand\fi - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@abspos@media@x@left} -% \begin{macrocode} -\def\ZREF@abspos@media@x@left#1{% - 0% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@media@x@right} -% \begin{macrocode} -\def\ZREF@abspos@media@x@right#1{% - \zref@extract{#1}\ZREF@abspos@media@width -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@media@x@center} -% \begin{macrocode} -\def\ZREF@abspos@media@x@center#1{% - \ZREF@abspos@media@x@left{#1}% - +\zref@extract{#1}\ZREF@abspos@media@width/2% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@abspos@media@y@top} -% \begin{macrocode} -\def\ZREF@abspos@media@y@top#1{% - \zref@extract{#1}\ZREF@abspos@media@height -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@media@y@bottom} -% \begin{macrocode} -\def\ZREF@abspos@media@y@bottom#1{% - 0% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@media@y@center} -% \begin{macrocode} -\def\ZREF@abspos@media@y@center#1{% - \zref@extract{#1}\ZREF@abspos@media@height/2% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Paper} -% -% \begin{macro}{\ZREF@abspos@paper@x@left} -% \begin{macrocode} -\def\ZREF@abspos@paper@x@left#1{% - 0% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@paper@x@right} -% \begin{macrocode} -\def\ZREF@abspos@paper@x@right#1{% - \zref@extract{#1}{paperwidth}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@paper@x@center} -% \begin{macrocode} -\def\ZREF@abspos@paper@x@center#1{% - \zref@extract{#1}{paperwidth}/2% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@abspos@paper@y@top} -% \begin{macrocode} -\let\ZREF@abspos@paper@y@top\ZREF@abspos@media@y@top -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@paper@y@bottom} -% \begin{macrocode} -\def\ZREF@abspos@paper@y@bottom#1{% - \ZREF@abspos@paper@y@top{#1}% - -\zref@extract{#1}{paperheight}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@paper@y@center} -% \begin{macrocode} -\def\ZREF@abspos@paper@y@center#1{% - \ZREF@abspos@paper@y@top{#1}% - -\zref@extract{#1}{paperheight}/2% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Origin} -% -% \begin{macro}{\ZREF@abspos@origin@x} -% \begin{macrocode} -\let\ZREF@temp\ltx@two -\ltx@IfUndefined{pdfhorigin}{}{% - \ifpdf - \let\ZREF@temp\ltx@zero - \fi -} -\ifx\ZREF@temp\ltx@two - \ifnum\mag=1000 % - \let\ZREF@temp\ltx@one - \fi -\fi -\ifcase\ZREF@temp - \def\ZREF@abspos@origin@x#1{% - \zref@extract{#1}{pdfhorigin}% - }% -\or - \def\ZREF@abspos@origin@x#1{% - 4736286% - }% -\or - \def\ZREF@abspos@origin@x#1{% - \numexpr\mag/1000*\dimexpr 1truein\relax\relax - }% -\fi -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@origin@y} -% \begin{macrocode} -\let\ZREF@temp\ltx@two -\ltx@IfUndefined{pdfvorigin}{}{% - \ifpdf - \let\ZREF@temp\ltx@zero - \fi -} -\ifx\ZREF@temp\ltx@two - \ifnum\mag=1000 % - \let\ZREF@temp\ltx@one - \fi -\fi -\ifcase\ZREF@temp - \def\ZREF@abspos@origin@y#1{% - \zref@extract{#1}{pdfvorigin}% - }% -\or - \def\ZREF@abspos@origin@y#1{% - 4736286% - }% -\or - \def\ZREF@abspos@origin@y#1{% - \numexpr\mag/1000*\dimexpr 1truein\relax\relax - }% -\fi -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Header} -% -% \begin{macro}{\ZREF@abspos@head@x@left} -% \begin{macrocode} -\def\ZREF@abspos@head@x@left#1{% - \ZREF@abspos@paper@x@left{#1}% - +\ZREF@abspos@origin@x{#1}% - +\zref@extract{#1}{hoffset}% - +\ifodd\zref@extractdefault{#1}{pagevalue}{\number\c@page} % - \zref@extract{#1}{oddsidemargin}% - \else - \zref@extract{#1}{evensidemargin}% - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@head@x@right} -% \begin{macrocode} -\def\ZREF@abspos@head@x@right#1{% - \ZREF@abspos@head@x@left{#1}% - +\zref@extract{#1}{textwidth}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@head@x@center} -% \begin{macrocode} -\def\ZREF@abspos@head@x@center#1{% - \ZREF@abspos@head@x@left{#1}% - +\zref@extract{#1}{textwidth}/2% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@abspos@head@y@top} -% \begin{macrocode} -\def\ZREF@abspos@head@y@top#1{% - \ZREF@abspos@paper@y@top{#1}% - -\ZREF@abspos@origin@y{#1}% - -\zref@extract{#1}{voffset}% - -\zref@extract{#1}{topmargin}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@head@y@bottom} -% \begin{macrocode} -\def\ZREF@abspos@head@y@bottom#1{% - \ZREF@abspos@head@y@top{#1}% - -\zref@extract{#1}{headheight}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@head@y@center} -% \begin{macrocode} -\def\ZREF@abspos@head@y@center#1{% - \ZREF@abspos@head@y@top{#1}% - -\zref@extract{#1}{headheight}/2% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Body} -% -% \begin{macro}{\ZREF@abspos@body@x@left} -% \begin{macrocode} -\let\ZREF@abspos@body@x@left\ZREF@abspos@head@x@left -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@body@x@right} -% \begin{macrocode} -\let\ZREF@abspos@body@x@right\ZREF@abspos@head@x@right -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@body@x@center} -% \begin{macrocode} -\let\ZREF@abspos@body@x@center\ZREF@abspos@head@x@center -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@abspos@body@y@top} -% \begin{macrocode} -\def\ZREF@abspos@body@y@top#1{% - \ZREF@abspos@head@y@bottom{#1}% - -\zref@extract{#1}{headsep}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@body@y@bottom} -% \begin{macrocode} -\def\ZREF@abspos@body@y@bottom#1{% - \ZREF@abspos@body@y@top{#1}% - -\zref@extract{#1}{textheight}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@body@y@center} -% \begin{macrocode} -\def\ZREF@abspos@body@y@center#1{% - \ZREF@abspos@body@y@top{#1}% - -\zref@extract{#1}{textheight}/2% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Footer} -% -% \begin{macro}{\ZREF@abspos@foot@x@left} -% \begin{macrocode} -\let\ZREF@abspos@foot@x@left\ZREF@abspos@head@x@left -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@foot@x@right} -% \begin{macrocode} -\let\ZREF@abspos@foot@x@right\ZREF@abspos@head@x@right -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@foot@x@center} -% \begin{macrocode} -\let\ZREF@abspos@foot@x@center\ZREF@abspos@head@x@center -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@abspos@foot@y@bottom} -% \begin{macrocode} -\def\ZREF@abspos@foot@y@bottom#1{% - \ZREF@abspos@body@y@bottom{#1}% - -\zref@extract{#1}{footskip}% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Marginal notes} -% -% \begin{macro}{\ZREF@abspos@marginpar@x@left} -% \begin{macrocode} -\def\ZREF@abspos@marginpar@x@left#1{% - \ifodd\zref@extractdefault{#1}{pagevalue}{\number\c@page} % - \ZREF@abspos@body@x@right{#1}% - +\zref@extract{#1}{marginparsep}% - \else - \ZREF@abspos@body@x@left{#1}% - -\zref@extract{#1}{marginparsep}% - -\zref@extract{#1}{marginparwidth}% - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@marginpar@x@right} -% \begin{macrocode} -\def\ZREF@abspos@marginpar@x@right#1{% - \ZREF@abspos@marginpar@x@left{#1}% - +\zref@extract{#1}{marginparwidth}% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@marginpar@x@center} -% \begin{macrocode} -\def\ZREF@abspos@marginpar@x@center#1{% - \ZREF@abspos@marginpar@x@left{#1}% - +\zref@extract{#1}{marginparwidth}/2% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@abspos@marginpar@y@top} -% \begin{macrocode} -\let\ZREF@abspos@marginpar@y@top\ZREF@abspos@body@y@top -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@marginpar@y@bottom} -% \begin{macrocode} -\let\ZREF@abspos@marginpar@y@bottom\ZREF@abspos@body@y@bottom -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@marginpar@y@center} -% \begin{macrocode} -\let\ZREF@abspos@marginpar@y@center\ZREF@abspos@body@y@center -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Stock paper} -% -% \begin{macro}{\ZREF@abspos@stock@x@left} -% \begin{macrocode} -\let\ZREF@abspos@stock@x@left\ZREF@abspos@paper@x@left -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@stock@x@right} -% \begin{macrocode} -\let\ZREF@abspos@stock@x@right\ZREF@abspos@paper@x@right -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@stock@x@center} -% \begin{macrocode} -\let\ZREF@abspos@stock@x@center\ZREF@abspos@paper@x@center -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ZREF@abspos@stock@y@top} -% \begin{macrocode} -\let\ZREF@abspos@stock@y@top\ZREF@abspos@paper@y@top -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@stock@y@bottom} -% \begin{macrocode} -\let\ZREF@abspos@stock@y@bottom\ZREF@abspos@paper@y@bottom -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@abspos@stock@y@center} -% \begin{macrocode} -\let\ZREF@abspos@stock@y@center\ZREF@abspos@paper@y@center -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</abspos> -% \end{macrocode} -% -% -% \subsection{Module \xmodule{dotfill}} -% -% \begin{macrocode} -%<*dotfill> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-dotfill}% - [2018/11/21 v2.27 Module dotfill for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% For measuring the width of \cs{zdotfill} we use the features -% provided by module \xmodule{savepos}. -% \begin{macrocode} -\RequirePackage{zref-savepos}[2018/11/21] -% \end{macrocode} -% For automatically generated label names we use the unique -% counter of module \xmodule{base}. -% \begin{macrocode} -\zref@require@unique -% \end{macrocode} -% Configuration is done by the key value interface of package -% \xpackage{keyval}. -% \begin{macrocode} -\RequirePackage{keyval} -% \end{macrocode} -% The definitions of the keys follow. -% \begin{macrocode} -\define@key{ZREF@DF}{unit}{% - \def\ZREF@df@unit{#1}% -} -\define@key{ZREF@DF}{min}{% - \def\ZREF@df@min{#1}% -} -\define@key{ZREF@DF}{dot}{% - \def\ZREF@df@dot{#1}% -} -% \end{macrocode} -% Defaults are set, see user interface. -% \begin{macrocode} -\providecommand\ZREF@df@min{2} -\providecommand\ZREF@df@unit{.44em} -\providecommand\ZREF@df@dot{.} -% \end{macrocode} -% \begin{macro}{\zdotfillsetup} -% Configuration of \cs{zdotfill} is done by \cs{zdotfillsetup}. -% \begin{macrocode} -\newcommand*{\zdotfillsetup}{\kvsetkeys{ZREF@DF}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\zdotfill} -% \cs{zdotfill} sets labels at the left and the right to get -% the horizontal position. \cs{zsavepos} is not used, because -% we do not need the vertical position. -% \begin{macrocode} -\ZREF@IfDefinable\zdotfill\def{% - {% - \leavevmode - \global\advance\c@zref@unique\ltx@one - \begingroup - \def\ZREF@temp{zref@\number\c@zref@unique}% - \pdfsavepos - \zref@labelbyprops{\thezref@unique L}{posx}% - \setlength{\dimen@}{\ZREF@df@unit}% - \zref@ifrefundefined{\thezref@unique R}{% - \ZREF@dotfill - }{% - \ifnum\numexpr\zposx{\thezref@unique R}% - -\zposx{\thezref@unique L}\relax - <\dimexpr\ZREF@df@min\dimen@\relax - \hfill - \else - \ZREF@dotfill - \fi - }% - \pdfsavepos - \zref@labelbyprops{\thezref@unique R}{posx}% - \endgroup - \kern\z@ - }% -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@dotfill} -% Help macro that actually sets the dots. -% \begin{macrocode} -\def\ZREF@dotfill{% - \cleaders\hb@xt@\dimen@{\hss\ZREF@df@dot\hss}\hfill -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</dotfill> -% \end{macrocode} -% -% \subsection{Module \xmodule{env}} -% -% \begin{macrocode} -%<*env> -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zref-env}% - [2018/11/21 v2.27 Module env for zref (HO)]% -\RequirePackage{zref-base}[2018/11/21] -\ifx\ZREF@base@ok Y% -\else - \expandafter\endinput -\fi -% \end{macrocode} -% -% \begin{macrocode} -\zref@newprop{envname}[]{\@currenvir} -\zref@newprop{envline}[]{\zref@env@line} -% \end{macrocode} -% -% \begin{macro}{\zref@env@line} -% Macro \cs{zref@env@line} extracts the line number -% from \cs{@currenvline}. -% \begin{macrocode} -\def\zref@env@line{% - \ifx\@currenvline\ltx@empty - \else - \expandafter - \ZREF@ENV@line\@currenvline\ltx@empty line \ltx@empty\@nil - \fi -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\ZREF@ENV@line} -% \begin{macrocode} -\def\ZREF@ENV@line#1line #2\ltx@empty#3\@nil{#2}% -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</env> -% \end{macrocode} -% -% -% \section{Test} -% -% \subsection{\cs{zref@localaddprop}} -% -% \begin{macrocode} -%<*test1> -\NeedsTeXFormat{LaTeX2e} -\nofiles -\documentclass{article} -\usepackage{zref-base}[2018/11/21] -\usepackage{qstest} -\IncludeTests{*} -\LogTests{log}{*}{*} - -\makeatletter -\def\ExpectList#1#2{% - \expandafter\expandafter\expandafter\Expect - \expandafter\expandafter\expandafter{\csname Z@L@#1\endcsname}{#2}% -} -\begin{qstest}{localaddprop}{localaddprop} - \ExpectList{main}{\default\page}% - \Expect{undefined}*{\meaning\foobar}% - \zref@newprop{foobar}{FOO}% - \Expect{undefined}*{\meaning\foobar}% - \zref@newlist{alist}% - \ExpectList{alist}{}% - \begingroup - \zref@localaddprop{main}{foobar}% - \Expect{undefined}*{\meaning\foobar}% - \ExpectList{main}{\default\page\foobar}% - \zref@localaddprop{alist}{page}% - \ExpectList{alist}{\page}% - \endgroup - \ExpectList{main}{\default\page}% - \ExpectList{alist}{}% - \zref@addprop{alist}{foobar}% - \ExpectList{alist}{\foobar}% - \Expect{undefined}*{\meaning\foobar}% -\end{qstest} -\@@end -%</test1> -% \end{macrocode} -% -% \subsection{Module \xmodule{base}} -% -% \begin{macrocode} -%<*test-base> -\NeedsTeXFormat{LaTeX2e} -\documentclass{article} -\usepackage{zref-base,zref-titleref}[2018/11/21] -\usepackage{qstest} -\IncludeTests{*} -\LogTests{log}{*}{*} - -\makeatletter -\newcommand*{\DefExpand}[2]{% - \expandafter\expandafter\expandafter\def - \expandafter\expandafter\expandafter#1% - \expandafter\expandafter\expandafter{#2}% - \@onelevel@sanitize#1% -} -\newcommand*{\Test}[3]{% - \Expect{#2}*{#1}% - \zref@wrapper@unexpanded{% - \Expect*{#3}*{#1}% - }% - \DefExpand\x{#1}% - \Expect*{#3}*{\x}% -} -\makeatother - -\begin{document} -\section{\textit{Hello} \textbf{World}} -\label{sec:hello} -\makeatletter -\zref@newprop{foo}[\@empty D\@empty efault]{\@empty V\@empty alue} -\begin{qstest}{getcurrent}{getcurrent} - \Test{\zref@getcurrent{foo}}% - {Value}{\noexpand\@empty V\noexpand\@empty alue}% - \Test{\zref@getcurrent{xy}}{}{}% -\end{qstest} -\begin{qstest}{extract}{extract} - \def\textbf#1{<#1>}% - \def\textit#1{[#1]}% hash-ok - \Test{\zref@extractdefault{xy}{page}{\@empty D\@empty efault}}% - {Default}{\noexpand\@empty D\noexpand\@empty efault}% - \Test{\zref@extractdefault{sec:hello}{foo}{\@empty A\@empty B}}% - {AB}{\noexpand\@empty A\noexpand\@empty B}% - \Test{\zref@extract{sec:hello}{foo}}% - {Default}{\noexpand\@empty D\noexpand\@empty efault}% - \zref@ifrefundefined{sec:hello}{% - }{% - \Test{\zref@extract{sec:hello}{default}}{1}{1}% - \Test{\zref@extract{sec:hello}{title}}% - {[Hello] <World>}% - {\noexpand\textit{Hello} \noexpand\textbf{World}}% - }% -\end{qstest} -\end{document} -%</test-base> -% \end{macrocode} -% -% \subsection{Module \xmodule{runs}} -% -% \begin{macrocode} -%<*test-runs> -\NeedsTeXFormat{LaTeX2e} -\documentclass{article} -\usepackage{zref-runs}[2018/11/21] -\usepackage{qstest} -\IncludeTests{*} -\LogTests{log}{*}{*} - -\begin{qstest}{zruns-preamble}{zruns-preamble} - \Expect{0}*{\zruns}% -\end{qstest} - -\AtBeginDocument{% - \begin{qstest}{zruns-atbegindocument}{zruns-atbegindocument}% - \Expect*{\number\ExpectRuns}*{\zruns}% - \end{qstest}% -} - -\begin{document} -\begin{qstest}{zruns-document}{zruns-document} - \Expect*{\number\ExpectRuns}*{\zruns}% -\end{qstest} -\end{document} -%</test-runs> -% \end{macrocode} -% -% \subsection{Module \xmodule{titleref}} -% -% \begin{macrocode} -%<*test-titleref-memoir> -\NeedsTeXFormat{LaTeX2e} -\documentclass{memoir} -\usepackage{zref-titleref}[2018/11/21] -\usepackage{qstest} -\IncludeTests{*} -\LogTests{log}{*}{*} -\begin{document} -\makeatletter -\def\List{} -\def\Label#1{% - \zref@label{#1}% - \g@addto@macro\List{% - \par - #1: [\ztitleref{#1}]% - }% - \mbox{}% - \zref@refused{#1}% - \zref@ifrefundefined{#1}{% - }{% - \begingroup - \edef\x{\zref@extract{#1}{title}}% - \Expect{OK/}*{\expandafter\ltx@carthree\x{}{}{}\@nil}% - \endgroup - }% -} -\def\Test#1{% - \csname#1\endcsname*{OK/#1}% - \Label{#1*}% - \csname#1\endcsname{OK/#1}% - \Label{#1}% - \csname#1\endcsname[OK/#1-toc]% - {WRONG-in-titleref/#1-toc-2}% - \Label{#1-toc}% - \expandafter\ifx\csname#1\endcsname\part - \else - \headnamereffalse - \csname#1\endcsname[OK/#1-th-toc]% - [WRONG-in-titleref/#1-th-toc-2]% - {WRONG-in-titleref/#1-th-toc-3}% - \Label{#1-th-toc}% - \headnamereftrue - \csname#1\endcsname[WRONG-in-titleref/#1-th-head-1]% - [OK/#1-th-head]% - {WRONG-in-titleref/#1-th-head-3}% - \Label{#1-th-head}% - \fi -} -\begin{qstest}{section}{section} - \@for\x:=part,chapter,section,subsection,subsubsection\do{% - \expandafter\Test\expandafter{\x}% - }% -\end{qstest} -\newpage -\List -\end{document} -%</test-titleref-memoir> -% \end{macrocode} -% -% \section{Installation} -% -% \subsection{Download} -% -% \paragraph{Package.} This package is available on -% CTAN\footnote{\CTANpkg{zref}}: -% \begin{description} -% \item[\CTAN{macros/latex/contrib/oberdiek/zref.dtx}] The source file. -% \item[\CTAN{macros/latex/contrib/oberdiek/zref.pdf}] Documentation. -% \end{description} -% -% -% \paragraph{Bundle.} All the packages of the bundle `oberdiek' -% are also available in a TDS compliant ZIP archive. There -% the packages are already unpacked and the documentation files -% are generated. The files and directories obey the TDS standard. -% \begin{description} -% \item[\CTANinstall{install/macros/latex/contrib/oberdiek.tds.zip}] -% \end{description} -% \emph{TDS} refers to the standard ``A Directory Structure -% for \TeX\ Files'' (\CTAN{tds/tds.pdf}). Directories -% with \xfile{texmf} in their name are usually organized this way. -% -% \subsection{Bundle installation} -% -% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the -% TDS tree (also known as \xfile{texmf} tree) of your choice. -% Example (linux): -% \begin{quote} -% |unzip oberdiek.tds.zip -d ~/texmf| -% \end{quote} -% -% \paragraph{Script installation.} -% Check the directory \xfile{TDS:scripts/oberdiek/} for -% scripts that need further installation steps. -% -% \subsection{Package installation} -% -% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting -% \docstrip\ archive. The files are extracted by running the -% \xfile{.dtx} through \plainTeX: -% \begin{quote} -% \verb|tex zref.dtx| -% \end{quote} -% -% \paragraph{TDS.} Now the different files must be moved into -% the different directories in your installation TDS tree -% (also known as \xfile{texmf} tree): -% \begin{quote} -% \def\t{^^A -% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% zref.sty & tex/latex/oberdiek/zref.sty\\ -% zref-base.sty & tex/latex/oberdiek/zref-base.sty\\ -% zref-abspage.sty & tex/latex/oberdiek/zref-abspage.sty\\ -% zref-abspos.sty & tex/latex/oberdiek/zref-abspos.sty\\ -% zref-counter.sty & tex/latex/oberdiek/zref-counter.sty\\ -% zref-dotfill.sty & tex/latex/oberdiek/zref-dotfill.sty\\ -% zref-env.sty & tex/latex/oberdiek/zref-env.sty\\ -% zref-hyperref.sty & tex/latex/oberdiek/zref-hyperref.sty\\ -% zref-lastpage.sty & tex/latex/oberdiek/zref-lastpage.sty\\ -% zref-marks.sty & tex/latex/oberdiek/zref-marks.sty\\ -% zref-nextpage.sty & tex/latex/oberdiek/zref-nextpage.sty\\ -% zref-pageattr.sty & tex/latex/oberdiek/zref-pageattr.sty\\ -% zref-pagelayout.sty & tex/latex/oberdiek/zref-pagelayout.sty\\ -% zref-perpage.sty & tex/latex/oberdiek/zref-perpage.sty\\ -% zref-runs.sty & tex/latex/oberdiek/zref-runs.sty\\ -% zref-savepos.sty & tex/latex/oberdiek/zref-savepos.sty\\ -% zref-thepage.sty & tex/latex/oberdiek/zref-thepage.sty\\ -% zref-titleref.sty & tex/latex/oberdiek/zref-titleref.sty\\ -% zref-totpages.sty & tex/latex/oberdiek/zref-totpages.sty\\ -% zref-user.sty & tex/latex/oberdiek/zref-user.sty\\ -% zref-xr.sty & tex/latex/oberdiek/zref-xr.sty\\ -% zref.pdf & doc/latex/oberdiek/zref.pdf\\ -% zref-example.tex & doc/latex/oberdiek/zref-example.tex\\ -% zref-example-lastpage.tex & doc/latex/oberdiek/zref-example-lastpage.tex\\ -% zref-example-nextpage.tex & doc/latex/oberdiek/zref-example-nextpage.tex\\ -% test/zref-test1.tex & doc/latex/oberdiek/test/zref-test1.tex\\ -% test/zref-test-base.tex & doc/latex/oberdiek/test/zref-test-base.tex\\ -% test/zref-test-runs.tex & doc/latex/oberdiek/test/zref-test-runs.tex\\ -% test/zref-test-titleref-memoir.tex & doc/latex/oberdiek/test/zref-test-titleref-memoir.tex\\ -% zref.dtx & source/latex/oberdiek/zref.dtx\\ -% \end{tabular}^^A -% }^^A -% \sbox0{\t}^^A -% \ifdim\wd0>\linewidth -% \begingroup -% \advance\linewidth by\leftmargin -% \advance\linewidth by\rightmargin -% \edef\x{\endgroup -% \def\noexpand\lw{\the\linewidth}^^A -% }\x -% \def\lwbox{^^A -% \leavevmode -% \hbox to \linewidth{^^A -% \kern-\leftmargin\relax -% \hss -% \usebox0 -% \hss -% \kern-\rightmargin\relax -% }^^A -% }^^A -% \ifdim\wd0>\lw -% \sbox0{\small\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\footnotesize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\scriptsize\t}^^A -% \ifdim\wd0>\linewidth -% \ifdim\wd0>\lw -% \sbox0{\tiny\t}^^A -% \ifdim\wd0>\linewidth -% \lwbox -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \else -% \lwbox -% \fi -% \else -% \usebox0 -% \fi -% \end{quote} -% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's -% TDS installing feature, then some files can already be in the right -% place, see the documentation of \docstrip. -% -% \subsection{Refresh file name databases} -% -% If your \TeX~distribution -% (\teTeX, \mikTeX, \dots) relies on file name databases, you must refresh -% these. For example, \teTeX\ users run \verb|texhash| or -% \verb|mktexlsr|. -% -% \subsection{Some details for the interested} -% -% \paragraph{Unpacking with \LaTeX.} -% The \xfile{.dtx} chooses its action depending on the format: -% \begin{description} -% \item[\plainTeX:] Run \docstrip\ and extract the files. -% \item[\LaTeX:] Generate the documentation. -% \end{description} -% If you insist on using \LaTeX\ for \docstrip\ (really, -% \docstrip\ does not need \LaTeX), then inform the autodetect routine -% about your intention: -% \begin{quote} -% \verb|latex \let\install=y\input{zref.dtx}| -% \end{quote} -% Do not forget to quote the argument according to the demands -% of your shell. -% -% \paragraph{Generating the documentation.} -% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate -% the documentation. The process can be configured by the -% configuration file \xfile{ltxdoc.cfg}. For instance, put this -% line into this file, if you want to have A4 as paper format: -% \begin{quote} -% \verb|\PassOptionsToClass{a4paper}{article}| -% \end{quote} -% An example follows how to generate the -% documentation with pdf\LaTeX: -% \begin{quote} -%\begin{verbatim} -%pdflatex zref.dtx -%makeindex -s gind.ist zref.idx -%pdflatex zref.dtx -%makeindex -s gind.ist zref.idx -%pdflatex zref.dtx -%\end{verbatim} -% \end{quote} -% -% \begin{thebibliography}{99} -% \bibpackage{footmisc}{Robin Fairbairns}{2004/01/23 v5.3a} -% {\CTANpkg{footmisc}} -% \bibpackage{hyperref}{Sebastian Rahtz, Heiko Oberdiek}{2006/08/16 v6.75c} -% {\CTANpkg{hyperref}} -% \bibpackage{lastpage}{Jeff Goldberg}{1994/06/25 v0.1b} -% {\CTANpkg{lastpage}} -% \bibpackage{nameref}{Sebastian Rahtz, Heiko Oberdiek}{2006/02/12 v2.24} -% {\CTANpkg{nameref}} -% \bibpackage{perpage}{David Kastrup}{2002/12/20 v1.0} -% {\CTANpkg{perpage}} -% \bibpackage{titleref}{Donald Arsenau}{2001/04/05 v3.1} -% {\CTANpkg{titleref}} -% \bibpackage{totpages}{Wilhelm M\"uller}{1999/07/14 v1.00} -% {\CTANpkg{totpages}} -% \bibpackage{xr}{David Carlisle}{1994/05/28 v5.02} -% {\CTANpkg{xr}} -% \bibpackage{xr-hyper}{David Carlisle}{2000/03/22 v6.00beta4} -% {\CTANpkg{xr-hyper}} -% \end{thebibliography} -% -% \begin{History} -% \begin{Version}{2006/02/20 v1.0} -% \item -% First version. -% \end{Version} -% \begin{Version}{2006/05/03 v1.1} -% \item -% Module \xmodule{perpage} added. -% \item -% Module redesign as packages. -% \end{Version} -% \begin{Version}{2006/05/25 v1.2} -% \item -% Module \xmodule{dotfillmin} added. -% \item -% Module \xmodule{base}: macros \cs{zref@require@uniqe} -% and \cs{thezref@unique} added -% (used by modules \xmodule{titleref} and \xmodule{dotfillmin}). -% \end{Version} -% \begin{Version}{2006/09/08 v1.3} -% \item -% Typo fixes and English cleanup by Per Starback. -% \end{Version} -% \begin{Version}{2007/01/23 v1.4} -% \item -% Typo in macro name fixed in documentation. -% \end{Version} -% \begin{Version}{2007/02/18 v1.5} -% \item -% \cs{zref@getcurrent} added (suggestion of Igor Akkerman). -% \item -% Module \xmodule{savepos} also supports \hologo{XeTeX}. -% \end{Version} -% \begin{Version}{2007/04/06 v1.6} -% \item -% Fix in modules \xmodule{abspage} and \xmodule{base}: -% Now counter |abspage| and |zref@unique| -% are not remembered by \cs{include}. -% \item -% Beamer support for module \xmodule{titleref}. -% \end{Version} -% \begin{Version}{2007/04/17 v1.7} -% \item -% Package \xpackage{atbegshi} replaces \xpackage{everyshi}. -% \end{Version} -% \begin{Version}{2007/04/22 v1.8} -% \item -% \cs{zref@wrapper@babel} and \cs{zref@refused} are now expandable -% if babel is not used or \cs{if@safe@actives} is already set to true. -% (Feature request of Josselin Noirel) -% \end{Version} -% \begin{Version}{2007/05/02 v1.9} -% \item -% Module \xmodule{titleref}: Some support for \cs{caption} of package -% \xpackage{longtable}, but only if \cs{label} is given after -% \cs{caption}. -% \end{Version} -% \begin{Version}{2007/05/06 v2.0} -% \item -% Uses package \xpackage{etexcmds} for accessing \hologo{eTeX}'s \cs{unexpanded}. -% \end{Version} -% \begin{Version}{2007/05/28 v2.1} -% \item -% Module \xmodule{titleref} supports caption of package \xpackage{listings}. -% \item -% Fixes in module \xmodule{titleref} for support -% of packages \xpackage{titlesec} and \xpackage{longtable}. -% \end{Version} -% \begin{Version}{2008/09/21 v2.2} -% \item -% Module \xmodule{base}: \cs{zref@iflistcontainsprop} is documented, but -% a broken \cs{zref@listcontainsprop} implemented. Name and -% implementation fixed (thanks Ohad Kammar). -% \end{Version} -% \begin{Version}{2008/10/01 v2.3} -% \item -% \cs{zref@localaddprop} added (feature request of Ohad Kammar). -% \item -% Module \xmodule{lastpage}: list `LastPage' added. Label `LastPage' will use -% the properties of this list (default is empty) along with the -% properties of the main list. -% \end{Version} -% \begin{Version}{2009/08/07 v2.4} -% \item -% Module \xmodule{runs} added. -% \end{Version} -% \begin{Version}{2009/12/06 v2.5} -% \item -% Module \xmodule{lastpage}: Uses package \xpackage{atveryend}. -% \item -% Module \xmodule{titleref}: Further commands are disabled -% during string expansion, imported from package \xpackage{nameref}. -% \end{Version} -% \begin{Version}{2009/12/07 v2.6} -% \item -% Version date added for package \xpackage{atveryend}. -% \end{Version} -% \begin{Version}{2009/12/08 v2.7} -% \item -% Module \xmodule{titleref}: Use of package \xpackage{gettitlestring}. -% \end{Version} -% \begin{Version}{2010/03/26 v2.8} -% \item -% \cs{zifrefundefined} added. -% \item -% Module \xmodule{lastpage}: Macros \cs{zref@iflastpage} -% and \cs{ziflastpage} added. -% \item -% Module \xmodule{thepage} added. -% \item -% Module \xmodule{nextpage} added. -% \end{Version} -% \begin{Version}{2010/03/29 v2.9} -% \item -% Module \xmodule{marks} added (without documentation). -% \item -% \cs{zref@addprop} now adds expanded property to list. -% \item -% Useless \cs{ZREF@ErrorNoLine} removed. -% \end{Version} -% \begin{Version}{2010/04/08 v2.10} -% \item -% Module \xmodule{xr} remembers the external document name -% in property `externaldocument'. -% \end{Version} -% \begin{Version}{2010/04/15 v2.11} -% \item -% Module \xmodule{titleref}: Better support of class \xclass{memoir}. -% \item -% Module \xmodule{titleref}: Support of theorems. -% \end{Version} -% \begin{Version}{2010/04/17 v2.12} -% \item -% Module \xmodule{base}: \cs{zref@newprop} ensures global -% empty default. -% \item -% Module \xmodule{xr}: Setup options \xoption{tozreflabel} -% and \xoption{toltxlabel} added. -% \end{Version} -% \begin{Version}{2010/04/19 v2.13} -% \item -% \cs{zref@setcurrent} throws an error if the property -% does not exist (Florent Chervet). -% \item -% \cs{zref@getcurrent} the documentation is fixed (Florent Chervet). -% Also it returns the empty string in case of errors. -% \item -% \cs{zref@addprop} and \cs{zref@localaddprop} now take a list of -% property names (feature request of Florent Chervet). -% \item -% Example for \cs{zref@wrapper@unexpanded} corrected (Florent Chervet). -% \end{Version} -% \begin{Version}{2010/04/22 v2.14} -% \item -% Bug fix for \cs{zref@getcurrent} second argument wasn't eaten in -% case of unknown property. -% \item -% \cs{zref@getcurrent} supports \cs{zref@wrapper@unexpanded}. -% \item -% \cs{zref@wrapper@unexpanded} added for \cs{ZREF@xr@tolabel}. -% \item -% \cs{zref@extract}, \cs{zref@extractdefault}, \cs{zref@getcurrent} -% are expandable in exact two steps -% except inside \cs{zref@wrapper@unexpanded}. -% \end{Version} -% \begin{Version}{2010/04/23 v2.15} -% \item -% \cs{zexternaldocument} fixed for property `url' when -% importing \cs{new@label} (bug found by Victor Ivrii). -% \item -% Two expansion steps also in \cs{zref@wrapper@unexpanded}. -% \item -% Nested calls of \cs{zref@wrapper@unexpanded} possible. -% \end{Version} -% \begin{Version}{2010/04/28 v2.16} -% \item -% More consequent use of package `ltxcmds' and `hologo'. -% \item -% Module \xmodule{pagelayout} added. -% \item -% Module \xmodule{pageattr} added. -% \item -% Robustness introduced for non-expandable interface macros. -% \item -% Internal change of the data format of property lists -% (suggestion of Florent Chervet). -% \item -% Module \xmodule{titleref}: Support of environment \textsf{description}. -% \end{Version} -% \begin{Version}{2010/05/01 v2.17} -% \item -% \cs{zref@newprop} throws an error if the property already exists. -% \item -% Module \xmodule{xr}: Bug fix for the case of several \xext{aux} files -% (bug found by Victor Ivrii). -% \item -% Module \xmodule{xr}: Property `urluse' and option \xoption{urluse} added. -% \end{Version} -% \begin{Version}{2010/05/13 v2.18} -% \item -% Module \xmodule{env} added. -% \item -% Module \xmodule{savepos}: \cs{zref@savepos} added. -% \end{Version} -% \begin{Version}{2010/10/22 v2.19} -% \item -% \cs{zref@addprop} and \cs{zref@localaddprop} are limited -% to one property only -% (incompatibility to versions v2.13 to v2.18). -% \item -% \cs{zref@addprops} and \cs{zref@localaddprops} added. -% \item -% \cs{zref@delprop} and \cs{zref@localdelprop} added. -% \item -% \cs{zref@labelbykv} and \cs{zkvlabel} (module \xmodule{user}) -% with keys \xoption{prop}, \xoption{list}, \xoption{delprop}, -% \xoption{immediate}, \xoption{values} added. -% \end{Version} -% \begin{Version}{2011/02/12 v2.20} -% \item -% Fix for warning in \xpackage{zref-xr}. -% \end{Version} -% \begin{Version}{2011/03/18 v2.21} -% \item -% Fix in module \xmodule{pagelayout} for \cs{zlistpagelayout}. -% \item -% Fix for \cs{zref@localaddprop} (probably since v2.19). -% \end{Version} -% \begin{Version}{2011/10/05 v2.22} -% \item -% Documentation fixed for \cs{zref@(local)addprop(s)}. -% \item -% Module \xmodule{base}: \cs{zref@def@extract}, \cs{zref@def@extractdefault} -% added. -% \item -% Fix in module \xmodule{pagelayout}: Because of missing \cs{noexpand} -% commands the values of the pagelayout properties on all pages were -% the values at package loading. -% \item -% Module \xmodule{base}: \cs{zref@showprop} added. -% \end{Version} -% \begin{Version}{2011/12/05 v2.23} -% \item -% Module \xmodule{savepos}: \cs{zsaveposx} and \cs{zsaveposy} added. -% \end{Version} -% \begin{Version}{2012/04/04 v2.24} -% \item -% Module \xmodule{titleref}, package \xpackage{titlesec}: -% some support for class `straight' (\cs{ttl@straight@i}) added. -% \end{Version} -% \begin{Version}{2016/05/16 v2.25} -% \item -% Documentation updates. -% \end{Version} -% \begin{Version}{2016/05/21 v2.26} -% \item -% update zref-savepos for new luatex -% \end{Version} -% \begin{Version}{2018/11/21 v2.27} -% \item -% adapted zref-perpage, see issue https://github.com/ho-tex/oberdiek/issues/26 -% \end{Version} -% \end{History} -% -% \PrintIndex -% -% \Finale -\endinput |