Agite automáticamente preguntas y respuestas para una prueba creada con LaTeX después de la compilación

Agite automáticamente preguntas y respuestas para una prueba creada con LaTeX después de la compilación

Supongamos que tenemos 30 preguntas para resolver un texto para estudiantes en lugar de 2 como este MWE:

\documentclass[leqno,11pt,landscape,a3paper]{extarticle}
\usepackage{multicol,mathtools}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\begin{document}

\begin{multicols}{1}
\begin{enumerate}
\item La velocità di 1,00$\cdot 10^2$ m/s espressa in km/h è:

$\fbox{A}$  36 km/h.\\
$\fbox{B}$    360 km/h.\\
$\fbox{C}$  27,8 km/h.\\
$\fbox{D}$    $3,\!60\cdot 10^{8}$ km/h.\\
$\fbox{E}$ \begin{tabular}{lllllllllllll}
\multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{6}{c}{} \\
\hline
\end{tabular}

\item In fisica nucleare si usa l'angstrom (simbolo: 1\AA=$10^{-10}$ m) e il fermi o femtometro (1 fm= $10^{-15}$ m). Qual è la relazione tra queste due unità di misura?

$\fbox{A}$  1 \AA = $10^5$ fm.\\
$\fbox{B}$    1 \AA = $10^{-5}$ fm.\\
$\fbox{C}$    1 \AA = $10^{-15}$ fm.\\
$\fbox{D}$    1 \AA = $10^{3}$ fm.\\
$\fbox{E}$ \begin{tabular}{lllllllllllll}
\multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{6}{c}{} \\
\hline
\end{tabular}
\end{enumerate}
\end{multicols}
\end{document}

¿Existe la posibilidad de poder intercambiar automáticamente, con algún artificio técnico, el orden de las preguntas y respuestas relativas a ellas, después de la compilación?

Relacionado con:Cuadrados para opciones de elección de respuestas y alineación perfecta con respuestas matemáticas

Respuesta1

Propongo aquí una posible forma:

  • Primero defino una macro \definequestionque toma 6 argumentos: el primero es una "etiqueta" para identificar la pregunta; el segundo es el texto de la pregunta; del tercero al sexto son las posibles respuestas. La pregunta se presenta alineada tcon \parboxun ancho fijo \questionwidth, que se puede ajustar según la página y el tamaño de fuente.
  • La macro \usequestion{label}imprime la pregunta correspondiente.
  • La macro \printrandomquestionsutiliza el randomlistpaquete para imprimir las preguntas en un orden pseudoaleatorio. El argumento opcional es la semilla, el argumento obligatorio debe ser una lista de etiquetas de preguntas separadas por comas.

Para ver una versión con respuestas reorganizadas, consulte a continuación.

\documentclass{article}

\usepackage{amsmath}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{randomlist}

\newlength{\questionwidth}
\setlength{\questionwidth}{6cm}

\makeatletter

\newcommand{\definequestion}[6]{% #1=label; #2: text; #3...#6 multiple choices
   \@namedef{question@#1}{%
     \parbox[t]{\questionwidth}{%
        #2\par\smallskip
        \framebox[1.3em]{A}~#3\par
        \framebox[1.3em]{B}~#4\par
        \framebox[1.3em]{C}~#5\par
        \framebox[1.3em]{D}~#6\par
        \framebox[1.3em]{E}~\rule{\dimexpr\questionwidth-2em}{0.4pt}
        }}
}

\newcommand*{\usequestion}[1]{\@nameuse{question@#1}}

\newcommand*{\printrandomquestions}[2][0]%
  {%
   \RLsetrandomseed{#1}%
   \def\@tempa{}%
   \@for\x:=#2\do{%
                  \edef\y{\noexpand\g@addto@macro\noexpand\@tempa{{\noexpand\@nameuse{question@\x}}}}%
                  \y
                 }%
   \expandafter\RandomEnumerateList\@tempa
  }

\makeatother

\definequestion{v}
{La velocità di $1,00\cdot 10^2$\,m$/$s espressa in km$/$h è:}
{36\,km$/$h}
{360\,km$/$h}
{27,8\,km$/$h}
{$3{,}60\cdot 10^{8}$\,km$/$h.}

\definequestion{A-fm}
{In fisica nucleare si usano l'angstrom (simbolo: $1\,\text{\AA}=10^{-10}$\,m)
 e il fermi o femtometro ($1\,\mathrm{fm} = 10^{-15}\,\mathrm{m}$). Qual è la
 relazione tra queste due unità di misura?}
{$1\,\text{\AA} = 10^5$\,fm.}
{$1\,\text{\AA} = 10^{-5}$\,fm}
{$1\,\text{\AA} = 10^{-15}$\,fm.}
{$1\,\text{\AA} = 10^{3}$\,fm.}

\definequestion{foo}{Foo}{}{}{}{}
\definequestion{baz}{Baz}{}{}{}{}


\begin{document}

Manually:
\usequestion{A-fm}

\printrandomquestions{v,A-fm,foo,baz}

\printrandomquestions[5]{v,A-fm,foo,baz}

\printrandomquestions[3]{v,A-fm,foo,baz}

\end{document}

Salida (en formato horizontal con 3 columnas para mayor claridad)

ingrese la descripción de la imagen aquí

EDITARCon la reorganización de las respuestas.

\documentclass[landscape]{article}

\usepackage[margin=1cm]{geometry} % for preview
\usepackage{multicol}

\usepackage{amsmath}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{randomlist}

\newlength{\questionwidth}
\setlength{\questionwidth}{6cm}

\makeatletter

\newcommand{\definequestion}[6]{% #1=label; #2: text; #3...#6 multiple choices
   \@namedef{question@#1}%
      {%
       \parbox[t]{\questionwidth}%
          {%
           \NewList{answers}%
           \SetList{answers}{{#3},{#4},{#5},{#6}}% extra grouping to protect commas in arguments
           #2\par\smallskip
           \count@=65
           \ForEachRandomItem{answers}{ans}{\framebox[1.3em]{\char\count@}~\ans\par\advance\count@\@ne}%
           \framebox[1.3em]{E}~\rule{\dimexpr\questionwidth-2em}{0.4pt}% last one
          }%
      }%
}

\newcommand*{\usequestion}[1]{\@nameuse{question@#1}} % provided but not quite useful

\newcommand*{\printrandomquestions}[2][0]%
  {%
   \RLsetrandomseed{#1}%
   \def\@tempa{}%
   \@for\x:=#2\do{%
                  \edef\y{\noexpand\g@addto@macro\noexpand\@tempa{{\noexpand\@nameuse{question@\x}}}}%
                  \y
                 }%
   \expandafter\RandomEnumerateList\@tempa
  }

\makeatother

\definequestion{v}
{La velocità di $1,00\cdot 10^2$\,m$/$s espressa in km$/$h è:}
{36\,km$/$h}
{360\,km$/$h}
{27,8\,km$/$h}
{$3{,}60\cdot 10^{8}$\,km$/$h.}

\definequestion{A-fm}
{In fisica nucleare si usano l'angstrom (simbolo: $1\,\text{\AA}=10^{-10}$\,m)
 e il fermi o femtometro ($1\,\mathrm{fm} = 10^{-15}\,\mathrm{m}$). Qual è la
 relazione tra queste due unità di misura?}
{$1\,\text{\AA} = 10^5$\,fm.}
{$1\,\text{\AA} = 10^{-5}$\,fm}
{$1\,\text{\AA} = 10^{-15}$\,fm.}
{$1\,\text{\AA} = 10^{3}$\,fm.}

\definequestion{foo}{Foo}{a}{b}{c}{d}
\definequestion{baz}{Baz}{$\alpha$}{$\beta$}{$\gamma$}{$\delta$}

\begin{document}

\begin{multicols}{3}
\printrandomquestions{v,A-fm,foo,baz}

\printrandomquestions[5]{v,A-fm,foo,baz}

\printrandomquestions[3]{v,A-fm,foo,baz}
\end{multicols}

\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Puedes utilizar expl3las instalaciones. Almacenar las respuestas en una secuencia permite mezclarlas.

También definí un testentorno que realiza tantas copias de la prueba como se solicite.

\documentclass{article}
\usepackage[a5paper,margin=1cm]{geometry} % just to make smaller images
\usepackage{multicol,mathtools}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}
\usepackage{siunitx}

\pagestyle{empty}

\sisetup{output-decimal-marker={,}}

\ExplSyntaxOn
\NewDocumentCommand{\question}{mm}
 {
  \seq_clear:N \l__sebastiano_question_body_seq
  \tl_map_inline:nn { #2 } { \seq_put_right:Nn \l__sebastiano_question_body_seq { ##1 } }
  \seq_shuffle:N \l__sebastiano_question_body_seq

  \item #1 \\[2ex]

  \seq_indexed_map_inline:Nn \l__sebastiano_question_body_seq
   {
    \fbox { \int_to_Alph:n { ##1 } } ~ ##2 \\[0.5ex]
   }

  \fbox { \int_to_Alph:n { \seq_count:N \l__sebastiano_question_body_seq + 1 } } ~
  \makebox[9em]{\hrulefill}
 }

\NewDocumentEnvironment{test}{m+b}
 {
  \prg_replicate:nn { #1 } { #2 \clearpage }
 }
 {}
\ExplSyntaxOff

\begin{document}

\begin{test}{4}

\begin{enumerate}
\question{La velocità di \SI{1,00e2}{m/s} espressa in \si{km/h} è:}{
  {\SI{36}{km/h}.}
  {\SI{360}{km/h}.}
  {\SI{27,8}{km/h}.}
  {\SI{3,60e8}{km/h}.}
}

\question{In fisica nucleare si usa l'angstrom (simbolo: $\SI{1}{\angstrom}=\SI{1e-10}{m}$) 
e il fermi o femtometro ($\SI{1}{fm}=\SI{1e-15}{m}$). Qual è la relazione tra queste due 
unità di misura?}{
  {$\SI{1}{\angstrom}=\SI{1e5}{fm}$.}
  {$\SI{1}{\angstrom}=\SI{1e-5}{fm}$.}
  {$\SI{1}{\angstrom}=\SI{1e-15}{fm}$.}
  {$\SI{1}{\angstrom}=\SI{1e3}{fm}$.}
}

\end{enumerate}

\end{test}

\end{document}

ingrese la descripción de la imagen aquí

información relacionada