For saving counter-values and retrieving them throughout the entire document, the LaTeX 2ε-kernel provides the \label-\ref-mechanism. Heiko Oberdiek's package refcount provides means for retrieving things expandably if this is needed.
But all these things are restricted to saving and retrieving values of counters that were stepped by the \refstepcounter-command.
Saving and retrieving an arbitrary ⟨number⟩ can be implemented by means of Heiko Oberdiek's package zref.
What a ⟨number⟩ is is elaborated in the TeXbook, Chapter 24: Summary of Vertical Mode and in The ε-TeX manual, section 5.1 Mode-Independent Commands.
A ⟨number⟩ does not necessarily need to come from a LaTeX counter.
A ⟨number⟩ can, e.g., also be the result of evaluating an expression of type number, i.e., a \numexpr-construct. \numexpr can be used for calculations. Expressions like \numexpr are explained in The ε-TeX manual, section 3.5 expressions.
The example below provides the following macros:
\StoreNumber{⟨label⟩}%
{⟨number⟩}
\StoreNumber evaluates ⟨number⟩ and creates a zref-referencing-label whose name is ⟨label⟩ for retrieving the result of that evaluation.
\StorePrefixAndNumberAndPostfix{⟨label⟩}%
{⟨prefix phrase⟩}%
{⟨number⟩}%
{⟨postfix phrase⟩}
\StorePrefixAndNumberAndPostfix evaluates ⟨number⟩ and creates a zref-referencing-label whose name is ⟨label⟩ for retrieving the result of that evaluation. By means of the same zref-referencing-label you can also retrieve ⟨prefix phrase⟩ and ⟨postfix phrase⟩. The two phrases get stored in "detokenized fashion". I.e., they will not be expanded/evaluated at the time of creating the zref-referencing-label.
\RetrieveNumber{⟨label⟩}
\RetrieveNumber retrieves the ⟨number⟩ associated to the zref-referencing-label ⟨label⟩.
\RetrievePrefix{⟨label⟩}
\RetrievePrefix retrieves the ⟨prefix phrase⟩ associated to the zref-referencing-label ⟨label⟩.
\RetrievePostfix{⟨label⟩}
\RetrievePostfix retrieves the ⟨postfix phrase⟩ associated to the zref-referencing-label ⟨label⟩.
\RetrievePrefixAndNumberAndPostfix{⟨label⟩}
\RetrievePrefixAndNumberAndPostfix retrieves
- the
⟨prefix phrase⟩ associated to the zref-referencing-label ⟨label⟩
- the
⟨number⟩ associated to the zref-referencing-label ⟨label⟩
- the
⟨postfix phrase⟩ associated to the zref-referencing-label ⟨label⟩.
In terms of these macros, you can, e.g., define macros
\storevalue{⟨label⟩}
and
\getvalue{⟨label⟩}
for saving and retrieving specifically the result of incrementing the value of counterA by 1:
\DeclareRobustCommand\storevalue[1]{%
\StoreNumber{#1}{\the\numexpr\value{counterA}+1\relax}%
}%
\DeclareRobustCommand\getvalue[1]{\textbf{Value \RetrieveNumber{#1}}}%
As with everything related to the \label-\ref-mechanism it takes at
least two LaTeX-runs until everything turns out correctly.
\documentclass[landscape]{article}
%--<stuff only needed for making the example looking good>-----------------
\usepackage{textcomp}
\usepackage{amstext}
\expandafter\ifx\csname pdfpagewidth\endcsname\relax\else
\pdfpagewidth=\paperwidth
\pdfpageheight=\paperheight
\fi
\expandafter\ifx\csname pagewidth\endcsname\relax\else
\pagewidth=\paperwidth
\pageheight=\paperheight
\fi
\textwidth=\paperwidth
\advance\textwidth by -2cm
\oddsidemargin=1cm
\advance\oddsidemargin by -1in
\advance\oddsidemargin by -\hoffset
\evensidemargin=\oddsidemargin
\textheight\paperheight
\advance\textheight by -2cm
\topmargin=1cm
\advance\topmargin by -1in
\advance\topmargin by -\voffset
\pagestyle{empty}%
\headheight=0pt
\headsep=0pt
\parindent=0ex
\parskip=\medskipamount
\newenvironment{makeverbatimnice}{\topsep=0ex\partopsep=0ex\ignorespaces}{}%
\newcommand\ThingsName[1]{\textsf{``#1''}}%
\newcommand\meta[1]{\textit{\textlangle#1\textrangle}}%
%--<eof stuff only needed for making the example looking good>-------------
%
%--<stuff needed for implementing the user-macros>-------------------------
\usepackage{zref}
\makeatletter
% My variant of \@bsphack / \@esphack.
\newskip\MYNAMESPACE@savsk
\newcommand*\MYNAMESPACE@bsphack{%
\relax
\ifhmode\MYNAMESPACE@savsk\lastskip\@savsk\lastskip\@savsf\spacefactor\fi
}%
\newcommand*\MYNAMESPACE@esphack{%
\relax
\ifhmode
\spacefactor\@savsf
\ifdim\@savsk>\z@
\ifdim\lastskip=\z@\nobreak\hskip\z@skip\fi
% The following \hskips are used for restoring \lastskip.
% I hope there are no evil side-effects. ;-)
\nobreak\hskip-\MYNAMESPACE@savsk
\nobreak\hskip\MYNAMESPACE@savsk
\ignorespaces
\fi
\fi
}%
%
\newcommand\MYNAMESPACE@Exchange[2]{#2#1}%
%
\AtBeginDocument{%
\@ifpackageloaded{hyperref}{%
\DeclareRobustCommand\MYNAMESPACE@RefUndefText{%
\texorpdfstring{\nfss@text{\reset@font\bfseries ??}}{??}%
}%
}{%
\DeclareRobustCommand\MYNAMESPACE@RefUndefText{%
\nfss@text{\reset@font\bfseries ??}%
}%
}%
}%
%
\zref@newprop{numbertostore}[0]{0}
\zref@newprop{numberprefix}[]{}
\zref@newprop{numberpostfix}[]{}
%
\DeclareRobustCommand\StorePrefixAndNumberAndPostfix[4]{%
\MYNAMESPACE@bsphack
\begingroup
\zref@setcurrent{numberprefix}{\detokenize{#2}}%
\zref@setcurrent{numberpostfix}{\detokenize{#4}}%
\expandafter\MYNAMESPACE@Exchange\expandafter{%
\expandafter{\the\numexpr\number#3\relax}%
}{%
\zref@setcurrent{numbertostore}%
}%
\zref@wrapper@immediate{%
\zref@labelbyprops{#1}{numbertostore,numberprefix,numberpostfix}%
}%
\endgroup
\MYNAMESPACE@esphack
}%
\DeclareRobustCommand\StoreNumber[2]{%
\MYNAMESPACE@bsphack
\begingroup
\expandafter\MYNAMESPACE@Exchange\expandafter{%
\expandafter{\the\numexpr\number#2\relax}%
}{%
\zref@setcurrent{numbertostore}%
}%
\zref@wrapper@immediate{%
\zref@labelbyprops{#1}{numbertostore}%
}%
\endgroup
\MYNAMESPACE@esphack
}%
\DeclareRobustCommand\RetrieveNumber[1]{%
\zref@refused{#1}%
\zref@extractdefault{#1}{numbertostore}{\MYNAMESPACE@RefUndefText}%
}%
\DeclareRobustCommand\RetrievePrefix[1]{%
\zref@refused{#1}%
\zref@extractdefault{#1}{numberprefix}{\MYNAMESPACE@RefUndefText}%
}%
\DeclareRobustCommand\RetrievePostfix[1]{%
\zref@refused{#1}%
\zref@extractdefault{#1}{numberpostfix}{\MYNAMESPACE@RefUndefText}%
}%
\DeclareRobustCommand\RetrievePrefixAndNumberAndPostfix[1]{%
\zref@refused{#1}%
\zref@extractdefault{#1}{numberprefix}{}%
\zref@extractdefault{#1}{numbertostore}{\MYNAMESPACE@RefUndefText}%
\zref@extractdefault{#1}{numberpostfix}{}%
}%
\makeatother
%--<eof stuff needed for implementing the user-macros>---------------------
\newcounter{counterA}
\newcounter{counterB}
\begin{document}
\hbox to\textwidth{\null\hrulefill\null}%
The \meta{number} stored as \ThingsName{First Stored Number} is retrieved
via \verb|\RetrieveNumber{First Stored Number}|:
\RetrieveNumber{First Stored Number}%
The prefix associated with the \meta{number} stored as
\ThingsName{Second Stored Number} is retrieved via
\verb|\RetrievePrefix{Second Stored Number}|:
\RetrievePrefix{Second Stored Number}%
The \meta{number} stored as \ThingsName{Second Stored Number} is retrieved
via \verb|\RetrieveNumber{Second Stored Number}|:
\RetrieveNumber{Second Stored Number}%
The postfix associated with the \meta{number} stored as
\ThingsName{Second Stored Number} is retrieved via
\verb|\RetrievePostfix{Second Stored Number}|:
\RetrievePostfix{Second Stored Number}%
Everything associated with the \meta{number} stored as
\ThingsName{Second Stored Number} is retrieved via
\verb|\RetrievePrefixAndNumberAndPostfix{Second Stored Number}|:\\
\RetrievePrefixAndNumberAndPostfix{Second Stored Number}
\hbox to\textwidth{\null\hrulefill\null}%
\ThingsName{counterA} is set to 7.
\setcounter{counterA}{7}%
\ThingsName{counterB} is set to 14.
\setcounter{counterB}{14}%
\hbox to\textwidth{\null\hrulefill\null}%
A \meta{number} is stored as \ThingsName{First Stored Number} via
\begin{makeverbatimnice}
\begin{verbatim}
\StoreNumber{First Stored Number}%
{\the\numexpr\value{counterA}*\value{counterB}/2\relax}%
\end{verbatim}%
\end{makeverbatimnice}%
\StoreNumber{First Stored Number}%
{\the\numexpr\value{counterA}*\value{counterB}/2\relax}%
\emph{(The expression evaluates to 49 as
\(\text{\texttt{\string\value\string{counterA\string}}}%
\cdot
\text{\texttt{\string\value\string{counterB\string}}}\,/\,2%
=7\cdot14\,/\,2=49\).)}
A prefix phrase, a \meta{number} and a postfix phrase are stored
under \ThingsName{Second Stored Number} via
\begin{makeverbatimnice}
\begin{verbatim}
\StorePrefixAndNumberAndPostfix{Second Stored Number}%
{The number }%
{\the\numexpr\value{counterB}+3\relax}%
{ is a prime number.}%
\end{verbatim}%
\end{makeverbatimnice}%
\StorePrefixAndNumberAndPostfix{Second Stored Number}%
{The number }%
{\the\numexpr\value{counterB}+3\relax}%
{ is a prime number.}%
\emph{(The expression evaluates to 17 as
\(\text{\texttt{\string\value\string{counterB\string}}}+3=14+3=17\).)}
\hbox to\textwidth{\null\hrulefill\null}%
The \meta{number} stored as \ThingsName{First Stored Number} is retrieved
via \verb|\RetrieveNumber{First Stored Number}|:
\RetrieveNumber{First Stored Number}%
The prefix associated with the \meta{number} stored as
\ThingsName{Second Stored Number} is retrieved via
\verb|\RetrievePrefix{Second Stored Number}|:
\RetrievePrefix{Second Stored Number}%
The \meta{number} stored as \ThingsName{Second Stored Number} is retrieved
via \verb|\RetrieveNumber{Second Stored Number}|:
\RetrieveNumber{Second Stored Number}%
The postfix associated with the \meta{number} stored as
\ThingsName{Second Stored Number} is retrieved via
\verb|\RetrievePostfix{Second Stored Number}|:
\RetrievePostfix{Second Stored Number}%
Everything associated with the \meta{number} stored as
\ThingsName{Second Stored Number} is retrieved via
\verb|\RetrievePrefixAndNumberAndPostfix{Second Stored Number}|:\\
\RetrievePrefixAndNumberAndPostfix{Second Stored Number}
\hbox to\textwidth{\null\hrulefill\null}%
\newpage
In terms of these macros you can, e.g., define macros \verb|\storevalue|
and \verb|\getvalue| for saving and retrieving specifically the result
of incrementing the value of \ThingsName{counterA} by 1:
\begin{makeverbatimnice}
\begin{verbatim}
\DeclareRobustCommand\storevalue[1]{%
\StoreNumber{#1}{\the\numexpr\value{counterA}+1\relax}%
}%
\DeclareRobustCommand\getvalue[1]{\textbf{Value \RetrieveNumber{#1}}}%
\end{verbatim}%
\end{makeverbatimnice}%
\DeclareRobustCommand\storevalue[1]{%
\StoreNumber{#1}{\the\numexpr\value{counterA}+1\relax}%
}%
\DeclareRobustCommand\getvalue[1]{\textbf{Value \RetrieveNumber{#1}}}%
\hbox to\textwidth{\null\hrulefill\null}%
\verb|\getvalue{vala}|: \getvalue{vala}%
\verb|\getvalue{valc}|: \getvalue{valc}%
\verb|\getvalue{valb}|: \getvalue{valb}%
\hbox to\textwidth{\null\hrulefill\null}%
\begin{makeverbatimnice}
\begin{verbatim}
\setcounter{counterA}{0}%
\stepcounter{counterA}% You can also use \refstepcounter but you don't have to.
\storevalue{vala}%
\stepcounter{counterA}% You can also use \refstepcounter but you don't have to.
\stepcounter{counterA}% You can also use \refstepcounter but you don't have to.
\storevalue{valb}%
\stepcounter{counterA}% You can also use \refstepcounter but you don't have to.
\storevalue{valc}%
\end{verbatim}%
\end{makeverbatimnice}%
\setcounter{counterA}{0}%
\stepcounter{counterA}% You can also use \refstepcounter but you don't have to.
\storevalue{vala}%
\stepcounter{counterA}% You can also use \refstepcounter but you don't have to.
\stepcounter{counterA}% You can also use \refstepcounter but you don't have to.
\storevalue{valb}%
\stepcounter{counterA}% You can also use \refstepcounter but you don't have to.
\storevalue{valc}%
\hbox to\textwidth{\null\hrulefill\null}%
\verb|\getvalue{vala}|: \getvalue{vala}%
\verb|\getvalue{valc}|: \getvalue{valc}%
\verb|\getvalue{valb}|: \getvalue{valb}%
\end{document}


\documentclassand end the tex code with\end{documentation}... – Mensch Feb 14 '19 at 06:47