From 38ed54c08f578d2d409e5970c13322dcc7644315 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Sat, 20 Aug 2022 03:01:01 +0000
Subject: CTAN sync 202208200300

---
 macros/latex/contrib/hereapplies/hereapplies.sty | 168 ++++++++++++-----------
 1 file changed, 85 insertions(+), 83 deletions(-)

(limited to 'macros/latex/contrib/hereapplies/hereapplies.sty')

diff --git a/macros/latex/contrib/hereapplies/hereapplies.sty b/macros/latex/contrib/hereapplies/hereapplies.sty
index c83693fb4a..3ac0462fef 100644
--- a/macros/latex/contrib/hereapplies/hereapplies.sty
+++ b/macros/latex/contrib/hereapplies/hereapplies.sty
@@ -7,7 +7,7 @@
 %
 % https://github.com/madmurphy/hereapplies.sty
 %
-% Version 0.4.0
+% Version 0.5.0
 %
 % Copyright (C) 2022 madmurphy <madmurphy333@gmail.com>
 %
@@ -40,11 +40,11 @@
 %
 %     \maketitle
 %
-%     This is concept one. To find this concept applied, please see
-%     \whereapplies{conceptOne}.
+%     This is concept one. To find this concept applied, please
+%     see \whereapplies{conceptOne}.
 %
-%     This is concept two. To find this concept applied, please see
-%     \whereapplies{conceptTwo}.\newpage
+%     This is concept two. To find this concept applied, please
+%     see \whereapplies{conceptTwo}.\newpage
 %
 %     \hereapplies{conceptOne}This is page \thepage. As you can see, ``concept
 %     one'' applies here.\newpage
@@ -52,14 +52,8 @@
 %     \hereapplies{conceptTwo}This is page \thepage. As you can see, ``concept
 %     two'' applies here.\newpage
 %
-%     \hereapplies{conceptOne}This is page \thepage. As you can see, ``concept
-%     one'' applies here.\newpage
-%
-%     \hereapplies{conceptTwo}This is page \thepage. As you can see, ``concept
-%     two'' applies here.\newpage
-%
-%     \hereapplies{conceptTwo}This is page \thepage. As you can see, ``concept
-%     two'' applies here.\newpage
+%     \hereapplies{conceptOne,conceptTwo}This is page \thepage. As you
+%     can see, both ``concept one'' and ``concept two'' apply here.\newpage
 %
 %     \hereapplies{conceptTwo}This is page \thepage. As you can see, ``concept
 %     two'' applies here.\newpage
@@ -81,47 +75,43 @@
 %         ===================
 %
 %
-% Assign a unique number to each concept
-\newcounter{@ha@concept@counter}
-% Assign a unique number to each unnamed occurrence of a concept
+% Assign a unique number to each identifier
+\newcounter{@ha@identifier@counter}
+% Assign a unique number to each unnamed occurrence of an identifier
 \newcounter{@ha@unlabeled@counter}
 %
 %
-% Macro `\@ha@makeoccurrencelist{HyperrefMacro}{LabelList}`
+% Macro `\@ha@makeoccurrencelist{hypermacro}{labels}`
 % *****************************************************************************
 %
 % Generate the list of page numbers with page range support
 %
-% This macro is for internal purposes only. When invoked, it scans the list of
-% labels provided (`LabelList`) and checks which labels refer to duplicate page
-% numbers and which page numbers can be grouped together.
-%
-% The `HyperrefMacro` argument is the macro from the `hyperref` package that
-% will process the label name. This should be either `T@pageref` -- equivalent
-% to `\pageref` -- or `@pagerefstar` -- equivalent to `\pageref*`.
+% This macro is for internal purposes only. When invoked, it scans the
+% comma-separated list of labels provided (`labels`) and checks which labels
+% refer to duplicate page numbers and which page numbers can be grouped
+% together.
 %
-% The `ConceptName` argument may contain only Latin letters and the "at" sign
-% (`@`). This string remains confined within the internal scope of the package
-% and does not create conflicts with possible macros or labels of the same
-% name.
+% The `hypermacro` argument is the macro from the `hyperref` package that will
+% process the label name. This should be either `T@pageref` -- equivalent to
+% `\pageref` -- or `@pagerefstar` -- equivalent to `\pageref*`.
 %
-% The `LabelList` must be a comma-separated list of labels.
+% The `labels` must be a comma-separated list of labels.
 %
 \newcommand{\@ha@makeoccurrencelist}[2]{%
 	% Reset the current page number
 	\def\@ha@tmp@@currp{-1}%
 	% Reset the current range offset
 	\def\@ha@tmp@@prangeoffs{-1}%
-	% Iterate through the `LabelList` argument
+	% Iterate through the `labels` argument
 	\@for\@ha@tmp@@thislabel:=#2\do{%
 		% Store the page number associated with this label
 		\edef\@ha@tmp@@nextp{\getpagerefnumber{\@ha@tmp@@thislabel}}%
 		% Check that we are not on the same page as in the last iteration
 		\unless\ifnum\@ha@tmp@@currp=\@ha@tmp@@nextp%
 			% This is not the same page as in the last iteration
-			% Is this the first page in which this concept appears?
+			% Is this the first page in which this identifier appears?
 			\unless\ifnum\@ha@tmp@@currp=-1%
-				% This is not the first page in which this concept appears
+				% This is not the first page in which this identifier appears
 				% Does this page follow immediately the previous label's page?
 				\ifnum\numexpr\@ha@tmp@@currp+1=\@ha@tmp@@nextp%
 					% This page follows immediately the previous label's page
@@ -175,35 +165,36 @@
 }
 %
 %
-% Macro `\@ha@newconcept{ConceptName}`
+% Macro `\@ha@newidentifier{identifier}`
 % *****************************************************************************
 %
-% Initialize a new concept
+% Initialize a new identifier
 %
 % This macro is for internal purposes only. When invoked, it sets up the helper
-% macros, counters and auxiliary files needed for keeping track of a concept.
-% If the concept was already initialized the macro will be no op.
+% macros, counters and auxiliary files needed for keeping track of an
+% identifier. If the identifier was already initialized the macro will be no
+% op.
 %
-% The `ConceptName` argument may contain only Latin letters and the "at" sign
+% The `identifier` argument may contain only Latin letters and the "at" sign
 % (`@`). This string remains confined within the internal scope of the package
 % and does not create conflicts with possible macros or labels of the same
 % name.
 %
-\newcommand{\@ha@newconcept}[1]{%
-	% Was this concept already initialized?
-	\expandafter\ifx\csname @ha@prop@@count@#1\endcsname\relax%
-		% The concept was never initialized
+\newcommand{\@ha@newidentifier}[1]{%
+	% Was this identifier already initialized?
+	\unless\ifcsname @ha@prop@@count@#1\endcsname%
+		% The identifier was never initialized
 		% Set the output to "??" - it will be updated by the .haN file
 		\expandafter\gdef\csname @ha@prop@@uoutput@#1\endcsname{\textbf{??}}%
 		% Set the starred output to "??" - it will be updated by the .haN file
 		\expandafter\gdef\csname @ha@prop@@soutput@#1\endcsname{\textbf{??}}%
 		% Use "p." for the preamble when there is only one occurrence
 		\expandafter\gdef\csname @ha@prop@@preamble@#1\endcsname{p.~}%
-		% Increase the counter of concepts
-		\stepcounter{@ha@concept@counter}%
-		% Store the current value of the counter of concepts
+		% Increase the counter of identifiers
+		\stepcounter{@ha@identifier@counter}%
+		% Store the current value of the counter of identifiers
 		\expandafter\xdef\csname
-			@ha@prop@@count@#1\endcsname{\the@ha@concept@counter}%
+			@ha@prop@@count@#1\endcsname{\the@ha@identifier@counter}%
 		% Initialize the .haN file
 		% Previous versions had this line, which created unwanted whitespaces:
 		%\@starttoc{ha\csname @ha@prop@@count@#1\endcsname}%
@@ -212,7 +203,7 @@
 		% Store all the occurrences when the document reaches the end
 		\AtEndDocument{%
 			% Make sure that there are occurrences
-			\expandafter\ifcsname @ha@prop@@labels@#1\endcsname%
+			\ifcsname @ha@prop@@labels@#1\endcsname%
 				% There are occurrences
 				% Set the .haN file as output
 				\addtocontents{ha\csname @ha@prop@@count@#1\endcsname}{%
@@ -241,31 +232,32 @@
 }
 %
 %
-% Macro: `\@ha@getpropat{PropertyName}{ConceptName}`
+% Macro: `\@ha@getpropat{field}{identifier}`
 % *****************************************************************************
 %
-% Get the value of a concept's property
+% Get the value of an identifier's property
 %
 % This macro is for internal purposes (but nothing forbids invoking it
-% directly). If a concept was never initialized the macro will initialize it.
+% directly). If the identifier was never initialized the macro will initialize
+% it.
 %
-% Possible values for the `PropertyName` argument are: `count`, `labels`,
-% `preamble`, `soutput`, `uoutput`.
+% Possible values for the `field` argument are: `count`, `labels`, `preamble`,
+% `soutput`, `uoutput`.
 %
-% The `ConceptName` argument may contain only Latin letters and the "at" sign
+% The `identifier` argument may contain only Latin letters and the "at" sign
 % (`@`). This string remains confined within the internal scope of the package
 % and does not create conflicts with possible macros or labels of the same
 % name.
 %
 \newcommand{\@ha@getpropat}[2]{%
-	% Make sure that the concept is initialized
-	\@ha@newconcept{#2}%
-	% Print the concept's property
+	% Make sure that the identifier is initialized
+	\@ha@newidentifier{#2}%
+	% Print the identifier's property
 	\csname @ha@prop@@#1@#2\endcsname%
 }
 %
 %
-% Macro: `\starred@labeled@hereapplies{Label}{ConceptName}`
+% Macro: `\starred@labeled@hereapplies{label}{identifiers}`
 % *****************************************************************************
 %
 % Equivalent to `\hereapplies*`, but the two arguments are both mandatory
@@ -274,23 +266,30 @@
 % directly). See the documentation of `\hereapplies` for more information.
 %
 \newcommand{\starred@labeled@hereapplies}[2]{%
-	% Make sure that the concept has been initialized
-	\@ha@newconcept{#2}%
 	% Assign a label to this occurrence
 	\label{#1}%
-	\expandafter\ifcsname @ha@prop@@labels@#2\endcsname%
-		% This is *not* the first occurrence
-		\expandafter\g@addto@macro\csname @ha@prop@@labels@#2\endcsname{,#1}%
-		% Use "pp." for the preamble when there are multiple occurrences
-		\expandafter\gdef\csname @ha@prop@@preamble@#2\endcsname{pp.~}%
-	\else%
-		% This is the first occurrence
-		\expandafter\gdef\csname @ha@prop@@labels@#2\endcsname{#1}%
-	\fi%
+	% Iterate through the comma-separated list `identifiers`
+	\@for\@ha@tmp@@id:=#2\do{%
+		% Make sure that the identifier is initialized
+		{\edef\tmp{\noexpand\@ha@newidentifier{\@ha@tmp@@id}}\tmp}%
+		% Is this the first time this identifier is mentioned?
+		\ifcsname @ha@prop@@labels@\@ha@tmp@@id\endcsname%
+			% This is *not* the first time
+			\expandafter\g@addto@macro\csname
+				@ha@prop@@labels@\@ha@tmp@@id\endcsname{,#1}%
+			% Use "pp." for the preamble when there are multiple occurrences
+			\expandafter\gdef\csname
+				@ha@prop@@preamble@\@ha@tmp@@id\endcsname{pp.~}%
+		\else%
+			% This is the first time
+			\expandafter\gdef\csname
+				@ha@prop@@labels@\@ha@tmp@@id\endcsname{#1}%
+		\fi%
+	}%
 }
 %
 %
-% Macro: `\starred@hereapplies[Label]{ConceptName}`
+% Macro: `\starred@hereapplies[label]{identifiers}`
 % *****************************************************************************
 %
 % Equivalent to `\hereapplies*`
@@ -306,7 +305,7 @@
 		\stepcounter{@ha@unlabeled@counter}%
 		% Call `\starred@hereapplies` with an opaque label
 		{\edef\tmp{\noexpand\starred@labeled@hereapplies{%
-			ha:#2-unnamed\the@ha@unlabeled@counter}{#2}%
+			hereapplies:unnamed\the@ha@unlabeled@counter}{#2}%
 		}\tmp}%
 	\else%
 		% The macro has been called with two arguments
@@ -320,20 +319,20 @@
 %         ===================
 %
 %
-% Macro: `\hereapplies[Label]{ConceptName}`
+% Macro: `\hereapplies[label]{identifiers}`
 % *****************************************************************************
 %
-% Notify the document that a particular concept applies and create a label for
-% it
+% Notify the document that one or more identifiers apply to a particular point
+% and add a label to it
 %
 % If the optional argument is passed the label created will be named
 % accordingly, otherwise an opaque name will be assigned to it. This argument
-% may contain only what is legal in both `\label` and `\pageref`.
+% may contain only what is legal for `\pageref`.
 %
-% The `ConceptName` argument may contain only Latin letters and the "at" sign
-% (`@`). This string remains confined within the internal scope of the package
-% and does not create conflicts with possible macros or labels of the same
-% name.
+% The `identifiers` argument must be a comma-separated list of identifiers.
+% Each of these may contain only Latin letters and the "at" sign (`@`). These
+% strings remain confined within the internal scope of the package and do not
+% create conflicts with possible macros or labels of the same names.
 %
 % The starred version of this macro (`\hereapplies*`) does not invoke the
 % `\phantomsection` directive.
@@ -344,16 +343,19 @@
 }
 %
 %
-% Macro: `\whereapplies{ConceptName}`
+% Macro: `\whereapplies{identifier}`
 % *****************************************************************************
 %
-% Print all the occurrences of a concept in the form "p. ..." or "pp. ..."
+% Print all the occurrences of an identifier in the form "p. ..." or "pp. ..."
 % with page range support
 %
-% The `ConceptName` argument may contain only Latin letters and the "at" sign
-% (`@`). This string remains confined within the internal scope of the package
-% and does not create conflicts with possible macros or labels of the same
-% name.
+% The `identifier` argument may contain only Latin letters and the "at"
+% sign (`@`). This string remains confined within the internal scope of the
+% package and does not create conflicts with possible macros or labels of the
+% same name.
+%
+% If the same `identifier` is not passed to `\hereapplies` at least once
+% throughout the document, `\whereapplies` will print "??".
 %
 % The starred version of this macro (`\whereapplies*`) will use `\pageref*`
 % instead of `\pageref` for generating the page list.
-- 
cgit v1.2.3

