Исправьте первые (два) вопроса с помощью пакета McExam

Исправьте первые (два) вопроса с помощью пакета McExam

Я пишу McExam с пакетом McExam с несколькими версиями. Первые два вопроса должны читаться так:

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

В обеих версиях экзамена заглавными вопросами должны быть вопрос № 1 и вопрос № 2.

Однако я не могу понять, как исключить эти два вопроса из рандомизации.

Я пробовал использовать опцию [follow], но пакет не позволяет использовать опцию follow для первого вопроса.

Я также пытался адаптировать пакет mcexam.sty, чтобы исключить первые два вопроса из рандомизации или ввести опцию [fixposition]. Мне удалось сделать так, чтобы первые два вопроса всегда были вопросами 1 и 2, но рандомизация также назначала некоторые другие вопросы под номерами 1 и 2 и перезаписывала мои предполагаемые вопросы 1 и 2.

Я также пытался включить два вопроса перед запуском среды mcquestion, но не мог понять, как указать среде mcquestion начать счетчик с 3. Я пробовал использовать \setcounter, но не мог понять, какой счетчик устанавливать.

Наконец, я попытался создать всего два раздела среды mcquestion, но это сбросило бы счетчик до 1 во второй среде.

Есть мысли или предложения?

решение1

Поигравшись с файлом .sty, я накопал что-то работающее.

В разделе 3.1 файла .sty вопросы рандомизированы. Я заменил строки с 978 по 1007 в исходном коде на

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

Это сработало

  • присваивая первым двум вопросам номера 1 и 2, и
  • увеличивая mc@counter и начальный счетчик соответственно в рандомизации.

Поскольку в каждом экзамене MC в качестве заглавных вопросов будут использоваться одни и те же два вопроса, для меня это подходит.

Однако это не очень элегантное решение, и мне все равно было бы интересно найти лучшее.

Связанный контент