各位——
我是 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}
}
}
}