Corrija as primeiras (duas) questões com o pacote McExam

Corrija as primeiras (duas) questões com o pacote McExam

Estou escrevendo um McExam com o pacote McExam com várias versões. As duas primeiras perguntas devem ser lidas

\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}

As perguntas de cabeçalho devem ser a pergunta nº 1 e a pergunta nº 2 em ambas as versões do exame.

No entanto, não consigo descobrir como excluir essas duas questões na randomização.

Tentei usar a opção [seguir], mas o pacote não permite que a primeira pergunta tenha a opção seguir.

Também tentei adaptar o pacote mcexam.sty para excluir as duas primeiras questões da randomização ou para introduzir uma opção [fixposition]. Consegui que as duas primeiras perguntas fossem sempre as perguntas 1 e 2, mas a randomização também atribuiria algumas outras perguntas como #1 e #2 e substituiria as perguntas 1 e 2 pretendidas.

Também tentei incluir as duas perguntas antes de iniciar o ambiente mcquestion, mas não consegui descobrir como dizer ao ambiente mcquestion para iniciar o contador em 3. Tentei usar \setcounter, mas não consegui descobrir qual contador definir.

Por último, tentei ter apenas duas seções do ambiente mcquestion, mas isso redefiniria o contador para 1 no segundo ambiente.

Alguma idéia ou sugestão?

Responder1

Depois de brincar com o arquivo .sty, encontrei algo que funciona.

Na seção 3.1 do arquivo .sty, as perguntas são aleatórias. Substituí as linhas 978 a 1007 no código original por

\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}
      }
    }  
  }}

Isso funcionou por

  • atribuindo as duas primeiras questões aos números 1 e 2, e
  • aumentando o mc@counter e o contador inicial, respectivamente, na randomização.

Como terei exatamente as mesmas duas perguntas do cabeçalho em todos os exames MC, isso funciona para mim.

No entanto, não é uma solução muito elegante e ainda estaria interessado em uma solução melhor.

informação relacionada