With a group of teachers friends we are compiling the national and international tests applied in my country from 1980.
These are "multiple choice" tests, with most of the tests already written using the enumerate package or the enumitem package. A total of 50 tests each with 60 or 80 questions.
In order to be able to save the keys to each question, without having to make any more modifications to the files, I have created an environment mchoice and two commands \keych and \keytest using \label...\reffor save keys of each question using xparse,pgffor,refcount, enumitem, hyperref and tcolorbox package.
As I will often use \label (about 4000 times) I would like to know if TeX (latex or pdflatex) can process it, that is, it will not give me a memory error.
I tried searching for a "perl hash style" to save the keys to each question, (whitout label ref) something similar to what I proposed in https://tex.stackexchange.com/a/215628/7832 (save value in list) but I did not get it to work.
Grateful in advance
% 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}


label/refabuse would cause a memory problem, and that saving the data in a list (ahash/arrayin myperlmind) would make the process faster . Thankful for everything. – Pablo González L Apr 09 '17 at 18:05\labelis that it writes to file so the definitions can be read at the start of the next run, to allow forward references, but it would seem that you never need forward references here so you could avoid writing 4000 lines to the aux file and reading them back. which will slow things down even if it does not stress memory limits. – David Carlisle Apr 09 '17 at 22:02label/reffor data save in an array (http://tex.stackexchange.com/questions/363961/change-the-use-of-label-ref-by-data-save-in-an-array) – Pablo González L Apr 09 '17 at 23:18