如果在一台机器上随机化,但在另一台机器上不随机化,则 \ifx 不完整(mcexam)

如果在一台机器上随机化,但在另一台机器上不随机化,则 \ifx 不完整(mcexam)

各位——

我是 Exchange 的新用户,但对 LaTeX 并不陌生,所以我希望能够对这个问题提供一些背景信息。

我有两台机器。我在两台机器上都在使用 Debian 9.11 (stretch);两台机器都是 64 位的,都安装了 TeXLive 2019 和 TeXStudio。在两台机器上安装时,我使用了 tug.org 提供的 install-tl 脚本,并且符号链接等在两台机器上都使用了默认设置。原则上(在我看来),两台机器上的设置应该几乎相同,但由于我收到的错误,它们肯定不是相同的。

我正在重新设计我的一些考试,使其更加随机化,使一些问题更具可重复使用性,所以我同时使用了 pythontex 和 mcexam。Python 的东西运行良好;mcexam 的东西才是问题所在。

在我的桌面上,我可以毫无问题地进行编译和随机化,只要我记得关闭环境和列表即可。我可以随机化问题和答案、设置种子、更改显示类型、编写 R 文件,等等。

但是,在我的笔记本电脑上,设置完全相同的选项后,当我设置“randomizeanswers=true”时,会出现错误。该错误是“不完整的 \ifx”错误,并忽略 mcquestions 环境结束后的所有文本;pdf 无法编译,而且我没有可用的测试。根据我在这个类似问题中发现的内容:使用 mcexam 包的 LaTeX 文件可以在 OSX 上编译,但不能在 Windows 上编译,我灵机一动,将“randomizeanswers=false”改为“false”,现在它可以在两台机器上按我期望的方式进行编译。我也尝试过调整其他软件包选项,它们似乎没有任何问题;这与软件包尝试随机化笔记本电脑上的答案选项的方式有关,这与台式机上的答案选项不同。

问题是……我不知道如何找出问题所在并修复它。软件包文档没有提供有关此选项如何执行其操作的核心机制的指导,虽然我可以打开 mcexam.sty 文件并尝试找出问题所在,但我还没有达到可以阅读基本 TeX 语言并自行诊断问题的水平。

有谁愿意伸出援手吗?

对于 MWE,我将使用 mcexam_example.tex 文件中的一对问题,因为如果 randomizeanswers=true,它们会在笔记本电脑上出现此错误,如果 =false,则可正确编译:

\documentclass[a4paper]{article}

\usepackage[output=concept
           ,numberofversions=4
           ,version=1
           ,seed=1
           ,randomizequestions=true
           ,randomizeanswers=false
           ,writeRfile=true
           ]{mcexam}

% Packages used for special things
\usepackage{tikz,framed} 

% Set headers and footers
\usepackage{fancyhdr,lastpage}
\pagestyle{fancy}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt} 
\renewcommand{\footrulewidth}{1pt}
\lfoot{\mctheversion}
\rfoot{Page \thepage\ of \pageref{LastPage}}

% Ensure each question+answers is printed entirely on the same page.
\usepackage{calc}
\renewenvironment{setmcquestion}{\begin{minipage}[t]{\linewidth-\labelwidth}}{\end{minipage}\par} 


\begin{document}

\begin{mcquestions}

\question What is the color of the sky?

          \begin{mcanswerslist}[fixlast]
          \answer[correct] blue
          \answer green
          \answer red
          \answer yellow
          \answer none of the above
          \end{mcanswerslist} 

\question Which figure is a square?
          \begin{mcanswers}
          \begin{tabular}{@{}cccc}
          \answer{1}{\tikz{\draw (-0.66,0)--(0.66,0)--(0,1)--cycle;}}& 
          \answer{2}{\tikz{\draw (0,0)--(2,0)--(2,1)--(0,1)--cycle;}}& 
          \answer[correct]{3}{\tikz{\draw (0,0)--(1,0)--(1,1)--(0,1)--cycle;}}& 
          \answer{4}{\tikz{\draw (0,0) circle[radius=0.5];}}\\
          \answernum{1}&\answernum{2}&\answernum{3}&\answernum{4}\\
          \end{tabular} 
          \end{mcanswers}

\end{mcquestions}

\end{document}

谢谢你尽你所能的帮助!

答案1

mc@randomizeAnswers@permuteall我昨天也遇到了这个错误,我自己已经通过对中的函数进行以下几行更改(第 1060 行添加一项,第 1063 行更新一项)来修复它mcexam.sty。希望这对您有所帮助。

--- /usr/local/texlive/2019/texmf-dist/tex/latex/mcexam/mcexam.sty
+++ mcexam.sty
@@ -1055,23 +1055,24 @@

 \def\mc@randomizeAnswers@permuteall{
   \foreach \a in {1,...,\csuse{mc@totalNumberOfAnswersQ\q}}{
     \csxdef{mc@answerTempnum\a}{\a}
     }
+  \numdef\@numberofpermuteanswers{\csuse{mc@totalNumberOfAnswersQ\q}}
   \numdef\@numberofswaps{\csuse{mc@totalNumberOfAnswersQ\q}-1}
   \foreach \v in {1,...,\mc@totalNumberOfVersions}{  
     \foreach \x in {1,...,\@numberofswaps}{
-      \pgfmathrandominteger{\r}{\x}{\csuse{mc@totalNumberOfAnswersQ\q}}
+      \pgfmathrandominteger{\r}{\x}{\@numberofpermuteanswers}
       \letcs\@temp{mc@answerTempnum\x}   
       \global\csletcs{mc@answerTempnum\x}{mc@answerTempnum\r}
       \global\cslet{mc@answerTempnum\r}{\@temp}
       }
     \foreach \a in {1,...,\csuse{mc@totalNumberOfAnswersQ\q}}{
        \csxdef{mc@randomAnswerNumberV\v Q\q A\a}{\csuse{mc@answerTempnum\a}}
        \csxdef{mc@originalAnswerNumberV\v Q\q A\csuse{mc@answerTempnum\a}}{\a}      
       }
     }
   }    

相关内容