Solucione las primeras (dos) preguntas con el paquete McExam

Solucione las primeras (dos) preguntas con el paquete McExam

Estoy escribiendo un McExam con el paquete McExam con múltiples versiones. Se supone que las dos primeras preguntas deben leer

\documentclass{article}
\usepackage{mcexam}
\begin{document}
    \begin{mcquestions}

    %%%% Header questions (not be included in randomization) %%%

    \question What is the version of your question booklet?
    \begin{mcanswerslist}
        \answer[correct] Version A
        \answer Version B
    \end{mcanswerslist}

    \question Your exam will be graded only if you write your version on top of the bubble
    sheet provided. Did you write the version number on top of the bubble sheet?
    \begin{mcanswerslist}
        \answer[correct] Yes, I have written the version number on top of the bubble sheet.
        \answer No, I have not yet written the version number on top of the bubble sheet.
    \end{mcanswerslist}

    %%%% Main test questions (starting with #3, included in randomization) %%%       

    \question What is 5 + 2?
    \begin{mcanswerslist}
        \answer[correct] 7
        \answer 5
        \answer 3   
    \end{mcanswerslist}

    \question What is 1 + 3?
    \begin{mcanswerslist}
        \answer[correct] 4
        \answer 6
        \answer 2   
    \end{mcanswerslist}
    \end{mcquestions}

\end{document}

Se supone que las preguntas del encabezado son la pregunta n.° 1 y la pregunta n.° 2 en ambas versiones del examen.

Sin embargo, no puedo entender cómo excluir estas dos preguntas en la aleatorización.

Intenté usar la opción [seguir], pero el paquete no permite que la primera pregunta tenga la opción seguir.

También intenté adaptar el paquete mcexam.sty para excluir las dos primeras preguntas de la aleatorización o para introducir una opción [posición fija]. Logré que las dos primeras preguntas siempre fueran las preguntas 1 y 2, pero la aleatorización también asignaría algunas otras preguntas como n.° 1 y n.° 2 y sobrescribiría mis preguntas 1 y 2 previstas.

También intenté incluir las dos preguntas antes de iniciar el entorno mcquestion, pero no pude entender cómo decirle al entorno mcquestion que iniciara el contador en 3. Intenté usar \setcounter, pero no pude determinar qué contador configurar.

Por último, intenté tener solo dos secciones del entorno mcquestion, pero eso restablecería el contador a 1 en el segundo entorno.

¿Alguna idea o sugerencia?

Respuesta1

Después de jugar con el archivo .sty, encontré algo que funciona.

En la sección 3.1 del archivo .sty, las preguntas se asignan al azar. Reemplacé las líneas 978 a 1007 en el código original con

\def\mc@randomizeQuestions{{    
  % Make the mcquestionblock control sequences which include macro's to set the randomization question counters 
  % exclude first two questions from randomization by setting counter to 2 and assigning the first two questions the first two numbers
  \setcounter{mc@counter}{2}
  \foreach \v in {1,...,\mc@totalNumberOfVersions}{
    \foreach \q in {1,...,2}{
      \csxdef{mc@randomQuestionNumberV\v Q\q}{\q}
      \csxdef{mc@originalQuestionNumberV\v Q\q}{\q} 
       }
    }   % For the randomization start at question q=3
  \foreach \q in {3,...,\mc@totalNumberOfQuestions}{
    \ifcsstring{mc@questionOption\q}{follow}{}{
      \refstepcounter{mc@counter}
      \csgdef{mc@questionblock\arabic{mc@counter}}{}
      }
    \csxappto{mc@questionblock\arabic{mc@counter}}{
      \noexpand\refstepcounter{mc@counter}
      \noexpand\csxdef{mc@randomQuestionNumberV\noexpand\v Q\q}{\noexpand\arabic{mc@counter}}
      \noexpand\csxdef{mc@originalQuestionNumberV\noexpand\v Q\noexpand\arabic{mc@counter}}{\q}        
      }  
    }
  % randomize question blocks
  \numdef\@numberofswaps{\mc@totalNumberOfQuestionblocks-1}
  \foreach \v in {1,...,\mc@totalNumberOfVersions}{
    \foreach \q in {1,...,\@numberofswaps}{
      \pgfmathrandominteger{\r}{\q}{\@numberofswaps}
      \numdef\r{\r+1}
      \global\letcs\@swap{mc@questionblock\r}
      \global\csletcs{mc@questionblock\r}{mc@questionblock\q}  
      \global\cslet{mc@questionblock\q}{\@swap}
      } % For the randomization  question block 2
    \setcounter{mc@counter}{2}  
    \foreach \q in {1,...,\mc@totalNumberOfQuestionblocks}{  
      \csuse{mc@questionblock\q}
      }
    }  
  }}

Esto funcionó por

  • asignando las dos primeras preguntas como número 1 y 2, y
  • aumentando el mc@counter y el contador inicial, respectivamente, en la aleatorización.

Dado que tendré exactamente las mismas dos preguntas como preguntas de encabezado en cada examen de MC, esto funciona para mí.

Sin embargo, no es una solución muy elegante y todavía estaría interesado en una mejor.

información relacionada