% \iffalse meta-comment % % Copyright (C) 2005-2014 by Ulrich M. Schwarz % Copyright (C) 2019 by Frank Mittelbach % Copyright (C) 2020- by Yukai Chou % % This file may be distributed and/or modified under the conditions of % the LaTeX Project Public License, version 1.3c. % The license can be obtained from % http://www.latex-project.org/lppl/lppl-1-3c.txt % %<*code> % \fi % |\@counteralias{#1}{#2}| makes |#1| a counter that uses |#2|'s count register. % This is useful for things like \pkg{hyperref}'s |\autoref|, which otherwise % can't distinguish theorems and definitions if they share a counter. % % For detailed information, see Die TeXnische Kom\"odie 3/2006. % \StopEventually{} % \begin{macro}{\@addtoreset} % add |\@elt{#1}| to |\cl@#2|. % This differs from the kernel implementation insofar as we trail the % cl lists until we find one that is empty or starts with |\@elt|. % \begin{macrocode} \def\aliasctr@f@llow#1#2\@nil#3{% \ifx#1\@elt \noexpand #3% \else \expandafter\aliasctr@f@llow#1\@elt\@nil{#1}% \fi } % \end{macrocode} % % \begin{macrocode} \newcommand\aliasctr@follow[1]{% \expandafter\aliasctr@f@llow % \end{macrocode} % Don't be confused: the third parameter is ignored here, we always % have recursion here since the \emph{token} |\cl@#1| is (hopefully) not |\@elt|. % \begin{macrocode} \csname cl@#1\endcsname\@elt\@nil{\csname cl@#1\endcsname}% } % \end{macrocode} % % \begin{macrocode} \renewcommand*\@addtoreset[2]{\bgroup \edef\aliasctr@@truelist{\aliasctr@follow{#2}}% \let\@elt\relax \expandafter\@cons\aliasctr@@truelist{{#1}}% \egroup} % \end{macrocode} % % This code has been adapted from David Carlisle's \pkg{remreset}. We % load that here only to prevent it from being loaded again. % \begin{macrocode} % FMi 2019-07-31 \@removereset is in the kernel these days \@ifundefined{@removefromreset}{\RequirePackage{remreset}}{} \renewcommand*\@removefromreset[2]{\bgroup \edef\aliasctr@@truelist{\aliasctr@follow{#2}}% \expandafter\let\csname c@#1\endcsname\@removefromreset \def\@elt##1{% \expandafter\ifx\csname c@##1\endcsname\@removefromreset \else \noexpand\@elt{##1}% \fi}% \expandafter\xdef\aliasctr@@truelist{% \aliasctr@@truelist} \egroup} % \end{macrocode} % \end{macro} % % \begin{macro}{\@counteralias} % make |#1| a counter that uses counter |#2|'s count register. % \begin{macrocode} \newcommand\@counteralias[2]{{% \def\@@gletover##1##2{% \expandafter\global \expandafter\let\csname ##1\expandafter\endcsname \csname ##2\endcsname }% \@ifundefined{c@#2}{\@nocounterr{#2}}{% \expandafter\@ifdefinable\csname c@#1\endcsname{% % \end{macrocode} % Four values make a counter foo: % \begin{itemize} % \item the count register accessed through |\c@foo|, % \item the output macro |\thefoo|, % \item the prefix macro |\p@foo|, % \item the reset list |\cl@foo|. % \end{itemize} % \pkg{hyperref} adds |\theHfoo| in particular. % \begin{macrocode} \@@gletover{c@#1}{c@#2}% \@@gletover{the#1}{the#2}% % \end{macrocode} % I don't see |\@counteralias| being called hundreds of times, % let's just unconditionally create |\theHctr|-macros for \pkg{hyperref}. % \begin{macrocode} \@@gletover{theH#1}{theH#2}% % \end{macrocode} % YkC: Compatibility with \pkg{cleveref}, copied from \pkg{cleveref}'s % support for \pkg{aliascnt}. % Here |\cref@resetby| requires its first argument to be the actual counter % name, not a macro storing the name. Thanks to Willie Wong. % \begin{macrocode} \@ifpackageloaded{cleveref}{% \edef\aliasctr@temp{% \noexpand\cref@resetby{#2}{\noexpand\cref@result}}% \aliasctr@temp \ifx\cref@result\relax\else% \cref@addtoreset{#1}{\cref@result}% \fi }{}% \@@gletover{p@#1}{p@#2}% \expandafter\global \expandafter\def\csname cl@#1\expandafter\endcsname \expandafter{\csname cl@#2\endcsname}% % \end{macrocode} % It is not necessary to save the value again: since we share a % count register, we will pick up the restored value of the % original counter. % \begin{macrocode} %\@addtoreset{#1}{@ckpt}% }% }% }} % \end{macrocode} % \end{macro} %\iffalse % %\fi