Following the comments of my previous question What is the limit number of \label in a document?
After analyzing the comments (@UlrikeFischer, @DavidCarlisle) on memory usage, especially the idea of preventing write 4000 lines in the auxiliary file and seeing the possibility that the science department will join the project and add some 4000 more lines. I have decided to change strategy by changing the use of label/ref.
My idea is to change (or adapt) the command \keych (which is basically a custom label) for xparse command \appenddata from Storing an array of strings in a command
Do not need to abuse label/ref for what i want, just keep the values and do not need to have reference to them.
I have tried to make some attempts with the use of lists, but, the solution that I tried to adapt works locally and I have not been able to achieve it (expl3 is very advanced for me:).
The MWE :
% file mchoice.tex
% arara: latex: {draft: yes}
% arara: latex
% arara: dvips
% arara: ps2pdf
% arara: clean: { files:[mchoice.aux, mchoice.log, mchoice.out,mchoice.dvi,mchoice.ps] }
\documentclass{article}
\usepackage{enumitem}
\usepackage{multicol}
\usepackage{pgffor}
\usepackage[colorlinks]{hyperref}
\usepackage{refcount}
\usepackage{tcolorbox}
\tcbuselibrary{many}
% Set key for multicols in enumitem
\SetEnumitemKey{columns}{before=\begin{multicols}{#1},after=\end{multicols}}%
% Custom label for save choice key
\makeatletter
\newcommand{\customlabel}[2]{%
\protected@write \@auxout {}{\string \newlabel {#1}{{#2}{\thepage}{#2}{#1}{}} }%
\hypertarget{#1}{}%
}
\makeatother
% Create a environment mchoice, scope enumerate and \keych
\NewDocumentEnvironment{mchoice}{m}{%
\label{#1}
% values for multicols
\setlength{\multicolsep}{5.0pt plus 2.0pt minus 1.5pt}
% values for enumitem
\setenumerate{parsep=3.5pt,partopsep=3.5pt,topsep=3.5pt,labelsep=5pt, leftmargin=*, itemsep=0pt,widest=80}%
\setenumerate[1]{labelsep=5pt,itemsep=1pt,label=\arabic*.}
\setenumerate[2]{leftmargin=16pt,nosep,itemsep=0pt,label=\Alph*)}
% Command to save key choice
\NewDocumentCommand\keych{o}{%
\IfNoValueTF{##1}%
{\customlabel{#1:\arabic{enumi}}{\Alph{enumii}}}%
{\customlabel{#1:\arabic{enumi}}{##1}}}% close \keych
}%
{%
\customlabel{max:#1}{\arabic{enumi}}
}% close mchoice
% Create a command to all key for test
% #1 : pass to tcolorbox
% #2 : name
% #3 : ref
% #4 : columns
\newcounter{last}
\DeclareTotalTColorBox{\keytest}{ O{} m m O{4}}
{ size=small,top=-1mm, left=0mm,width=\columnwidth,%
adjusted title=center,halign title=center,title filled,fontupper=\small,%
fonttitle=\small\sffamily,adjusted title={#2},center title,#1}
{%
\begin{enumerate}[columns=#4,leftmargin=15pt,labelsep=3pt,font=\small,nosep,widest=25]%
\small
\setlength{\columnsep}{0pt}
\setcounterref{last}{max:#3}
\foreach \x in {1,...,\value{last}} {
\item \ref{#3:\x}
}
\end{enumerate}
}%
\begin{document}
\section{National Prov}
\begin{mchoice}{paa-1985-a}
\begin{center}
\textbf{PAA 1985 (A)}
\end{center}
\begin{enumerate}
\item First type of questions
\begin{enumerate}%
\item value
\item value
\item value
\item correct \keych
\item value
\end{enumerate}
\item Second type of questions
\begin{enumerate}[leftmargin=3pc,label=\Roman*.]
\item $2\alpha+2\delta=90^{\circ}$
\item $\alpha=\delta$
\item $\angle EDF=45^{\circ}$
\end{enumerate}
\begin{enumerate}[columns=2]%
\item I only
\item II only \keych
\item I and II only
\item I and III only
\item I, II, and III
\end{enumerate}
\item Third type of questions
\begin{enumerate}[leftmargin=3pc,label=(\arabic*)]
\item $2\alpha+2\delta=90^{\circ}$
\item $\angle EDF=45^{\circ}$
\end{enumerate}
\begin{enumerate}[columns=2]%
\item Altenativa A
\item Altenativa B \keych
\item Altenativa C
\item Altenativa D
\item Altenativa E
\end{enumerate}
\item Fourth type of questions (these need manual tuning for alternatives,
usually carrying pictures or tables)
\begin{center}
\noindent
\hspace*{0.75cm}\includegraphics[scale=0.15]{example-image-b}
\end{center}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline A)
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline B)
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline C)
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline D) \keych[D]
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline E)
\end{minipage}
\item Fifth type of questions, a problem with numerical response \keych[\$2]
\end{enumerate}
\end{mchoice}
\begin{mchoice}{paa-1985-b}
\begin{center}
\textbf{PAA 1985 (B)}
\end{center}
\begin{enumerate}
\item First type of questions
\begin{enumerate}%
\item value
\item correct \keych
\item value
\item value
\item value
\end{enumerate}
\item Second type of questions
\begin{enumerate}[leftmargin=3pc,label=\Roman*.]
\item $2\alpha+2\delta=90^{\circ}$
\item $\alpha=\delta$
\item $\angle EDF=45^{\circ}$
\end{enumerate}
\begin{enumerate}[columns=2]%
\item I only
\item II only
\item I and II only
\item I and III only \keych
\item I, II, and III
\end{enumerate}
\item Third type of questions
\begin{enumerate}[leftmargin=3pc,label=(\arabic*)]
\item $2\alpha+2\delta=90^{\circ}$
\item $\angle EDF=45^{\circ}$
\end{enumerate}
\begin{enumerate}[columns=2]%
\item Altenativa A
\item Altenativa B
\item Altenativa C
\item Altenativa D \keych
\item Altenativa E
\end{enumerate}
\item Fourth type of questions (these need manual tuning for alternatives,
usually carrying pictures or tables)
\begin{center}
\noindent
\hspace*{0.75cm}\includegraphics[scale=0.15]{example-image-b}
\end{center}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline A)
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline B)
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline C)
\end{minipage}
\begin{minipage}{0.2\textwidth} \centering
\includegraphics[scale=0.15]{example-image-a}\newline D)
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline E) \keych[E]
\end{minipage}
\item Fifth type of questions, a problem with numerical response \keych[\$3]
\end{enumerate}
\end{mchoice}
\section{Answer key}
\begin{multicols}{2}
\setlength{\columnsep}{0pt}
\keytest{PAA 1985 (form A)}{paa-1985-a}[5]
\keytest{PAA 1985 (form B)}{paa-1985-b}[5]
\end{multicols}
\end{document}
Grateful again
EDIT
In addition to the brilliant answer given by Master David C., I enclose an alternative answer:
% !file: mchoice.tex
% arara: pdflatex: {draft: yes}
% arara: clean: { files:[mchoice.aux, mchoice.log, mchoice.out] }
\documentclass{article}
\usepackage{enumitem}
\usepackage{multicol}
\usepackage{pgffor}
\usepackage[colorlinks]{hyperref}
\usepackage{tcolorbox}
\tcbuselibrary{many}
% Set key for multicols in enumitem
\SetEnumitemKey{columns}{before=\begin{multicols}{#1},after=\end{multicols}}%
% Some definition
\newtheorem{theorem}{Theorem}
\newtheorem{exercise}[theorem]{Exercise}
% Custom label for save choice key and hypertarget :)
\makeatletter
\newcommand{\customlabel}[2]{%
\expandafter\xdef\csname#1\endcsname{#2}%
\hypertarget{#1}{}%
}
\makeatother
% Adapted from https://tex.stackexchange.com/a/364763/7832
\ExplSyntaxOn
% Reporter macro, is expandable
\cs_new:Npn \reportnumberofseqitems #1{%
\seq_count:c {l_bcp_data_#1_seq}%
}
\NewDocumentCommand{\storedata}{mm}
{
\bcp_store_data:nn { #1 } { #2 }
}
\NewDocumentCommand{\appenddata}{mm}
{
\bcp_append_data:nn { #1 } { #2 }
}
\DeclareExpandableDocumentCommand{\getdata}{O{1}m}
{
\bcp_get_data:nn { #1 } { #2 }
}
\cs_new_protected:Npn \bcp_store_data:nn #1 #2
{
% create the sequence if it doesn't exist or clear it if it exists
\seq_if_exist:cTF { l_bcp_data_#1_seq }
{ \seq_new:c { l_bcp_data_#1_seq } }
{ \seq_gclear:c { l_bcp_data_#1_seq } }
% append the items
\__bcp_append_data:nn { #1 } { #2 }
}
\cs_new_protected:Npn \bcp_append_data:nn #1 #2
{
% create the sequence if it doesn't exist, do nothing if it exists
\seq_if_exist:cF { l_bcp_data_#1_seq }
{ \seq_new:c { l_bcp_data_#1_seq } }
% append the items
\__bcp_append_data:nn { #1 } { #2 }
}
\cs_new_protected:Npn \__bcp_append_data:nn #1 #2
{
% append items one at a time
\tl_map_inline:nn { #2 }
{
\seq_gput_right:cn { l_bcp_data_#1_seq } { ##1 }
}
}
\cs_new:Npn \bcp_get_data:nn #1 #2
{
% retrieve the requested item
\seq_item:cn { l_bcp_data_#2_seq } { #1 }
}
\ExplSyntaxOff
% Create a environment mchoice, scope enumerate and \keych
\NewDocumentEnvironment{mchoice}{m}{%
% values for multicols
\setlength{\multicolsep}{5.0pt plus 2.0pt minus 1.5pt}
% values for enumitem
\setenumerate{parsep=3.5pt,partopsep=3.5pt,topsep=3.5pt,labelsep=5pt, leftmargin=*, itemsep=0pt,widest=80}%
\setenumerate[1]{labelsep=5pt,itemsep=1pt,label=\arabic*.}
\setenumerate[2]{leftmargin=16pt,nosep,itemsep=0pt,label=\Alph*)}
% Command to save key choice
\NewDocumentCommand\keych{o}{%
\IfNoValueTF{##1}%
{
\customlabel{#1:\arabic{enumi}}{\Alph{enumii}}\appenddata{#1}{{\Alph{enumii}}}
}%
{
\customlabel{#1:\arabic{enumi}}{XXX}\appenddata{#1}{{##1}}
} % close custom
}% close \keych
}%
{%
}% close mchoice
% Create a environment to encapsulate short answer
% #1 : short answer
\NewDocumentEnvironment{myenumerate}{m}{%
\NewDocumentCommand\sol{m}{%
\appenddata{#1}{{##1}}%
}% close \sol{
}%
{%
}% close myenumerate
% Create a command to all key/answer for test
% #1 : pass to tcolorbox
% #2 : name
% #3 : list/ref
% #4 : columns
\DeclareTotalTColorBox{\keytest}{ O{} m m O{4}}
{ colback=white,size=small,top=0mm,bottom=1.5mm, left=0mm,width=\columnwidth,title filled,%
fontupper=\small,fonttitle=\small\sffamily,adjusted title={#2},center title,#1}
{%
\begin{enumerate}[columns=#4,leftmargin=15pt,labelsep=3pt,font=\small,nosep,widest=25]%
\small
\setlength{\columnsep}{0pt}%
\edef\tmp{\noexpand\foreach \noexpand\x in {1,...,\reportnumberofseqitems{#3}} }%
\tmp{%
\item \hyperlink{#3:\x}{\getdata[\x]{#3}}%
}
\end{enumerate}%
}%
\begin{document}
\section{National Prov}
\begin{mchoice}{paa-1985-a}
\begin{center}
\textbf{PAA 1985 (A)}
\end{center}
\begin{enumerate}
\item First type of questions
\begin{enumerate}%
\item value
\item value
\item value
\item correct \keych
\item value
\end{enumerate}
\item Second type of questions
\begin{enumerate}[leftmargin=3pc,label=\Roman*.]
\item $2\alpha+2\delta=90^{\circ}$
\item $\alpha=\delta$
\item $\angle EDF=45^{\circ}$
\end{enumerate}
\begin{enumerate}[columns=2]%
\item I only
\item II only \keych
\item I and II only
\item I and III only
\item I, II, and III
\end{enumerate}
\item Third type of questions
\begin{enumerate}[leftmargin=3pc,label=(\arabic*)]
\item $2\alpha+2\delta=90^{\circ}$
\item $\angle EDF=45^{\circ}$
\end{enumerate}
\begin{enumerate}[columns=2]%
\item Altenativa A
\item Altenativa B \keych
\item Altenativa C
\item Altenativa D
\item Altenativa E
\end{enumerate}
\item Fourth type of questions (these need manual tuning for alternatives,
usually carrying pictures or tables)
\begin{center}
\noindent
\hspace*{0.75cm}\includegraphics[scale=0.15]{example-image-b}
\end{center}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline A)
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline B)
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline C)
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline D) \keych[D]
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline E)
\end{minipage}
\item Fifth type of questions, a problem with numerical response \keych[$\sqrt{2}$]
\end{enumerate}
\end{mchoice}
\begin{mchoice}{paa-1985-b}
\begin{center}
\textbf{PAA 1985 (B)}
\end{center}
\begin{enumerate}
\item First type of questions
\begin{enumerate}%
\item value
\item correct \keych
\item value
\item value
\item value
\end{enumerate}
\item Second type of questions
\begin{enumerate}[leftmargin=3pc,label=\Roman*.]
\item $2\alpha+2\delta=90^{\circ}$
\item $\alpha=\delta$
\item $\angle EDF=45^{\circ}$
\end{enumerate}
\begin{enumerate}[columns=2]%
\item I only
\item II only
\item I and II only
\item I and III only \keych
\item I, II, and III
\end{enumerate}
\item Third type of questions
\begin{enumerate}[leftmargin=3pc,label=(\arabic*)]
\item $2\alpha+2\delta=90^{\circ}$
\item $\angle EDF=45^{\circ}$
\end{enumerate}
\begin{enumerate}[columns=2]%
\item Altenativa A
\item Altenativa B
\item Altenativa C
\item Altenativa D \keych
\item Altenativa E
\end{enumerate}
\item Fourth type of questions (these need manual tuning for alternatives,
usually carrying pictures or tables)
\begin{center}
\noindent
\hspace*{0.75cm}\includegraphics[scale=0.15]{example-image-b}
\end{center}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline A)
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline B)
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline C)
\end{minipage}
\begin{minipage}{0.2\textwidth} \centering
\includegraphics[scale=0.15]{example-image-a}\newline D)
\end{minipage}
\begin{minipage}{0.2\textwidth}
\centering
\includegraphics[scale=0.15]{example-image-a}\newline E) \keych[E]
\end{minipage}
\item Fifth type of questions, a problem with numerical response \keych[\$3]
\end{enumerate}
\end{mchoice}
\section{Exercices}
\begin{exercise}
Factoring next expression:
\end{exercise}
\begin{myenumerate}{exe:1}
\begin{enumerate}
\item $a^{2}-b^{2}$ \sol{$\left(a-b\right)\left(a+b\right)$}
\item $x^{2}-2x+1$ \sol{$\left(x-1\right)^{2}$}
\item $3x+3y+3z$ \sol{$3x+3y+3z$}
\item $3x+3y-6z$ \sol{$3\left(x+y-2z\right)$}
\end{enumerate}
\end{myenumerate}
\section{Answer key}
\begin{multicols}{2}
\setlength{\columnsep}{0pt}
\keytest{PAA 1985 (form A)}{paa-1985-a}[5]
\keytest{PAA 1985 (form B)}{paa-1985-b}[5]
\end{multicols}
\keytest{Exercise 1}{exe:1}
\end{document}