麦克萨姆似乎不允许在 mcquestions 环境中使用 \input 命令。此 MWE 使用 mcexam 包创建包含三个 mc 问题的考试。\input 行从文件 q1.tex 读取问题的内容,但 LaTeX 表示该文件的顶行(即 \question ...)是未定义的控制序列。然后它将第一个和第二个问题的答案列表合并起来。
您可以注释掉 \input 行以确认 MWE 在没有外部输入的情况下也能工作。您可以将 q1.tex 的内容复制到 test.tex 以替换输入行并确认 q1 的内容正确。
% test.tex
\documentclass{article}
\usepackage[output=exam,numberofversions=1,version=1,seed=1,randomizeanswers=false,randomizequestions=false]{mcexam}
\begin{document}
\begin{mcquestions}
\question The sky is
\begin{mcanswerslist}
\answer green.
\answer yellow.
\answer[correct] blue.
\end{mcanswerslist}
\input{q1.tex}
\question $1+1$ equals
\begin{mcanswerslist}
\answer 1.
\answer[correct] 2.
\answer 3.
\end{mcanswerslist}
\end{mcquestions}
\end{document}
这是外部文件。
% q1.tex
\question Who was in the Beatles?
\begin{mcanswerslist}
\answer[correct] John Lennon
\answer Elton John
\answer Buddy Holly
\end{mcanswerslist}
这是编译后的文档的屏幕截图。
为什么我要从外部文件中读取问题,每个问题占一行输入?我正在为教科书开发一个包含 1300 个问题的测试库。我希望有一个简单的解决方案,因为当我们将其推广给教师时,复杂的解决方案是行不通的。
答案1
该包会扫描\question
并保存它们,可能是为了支持随机化顺序,即使在禁用随机化的情况下。
最简单的方法就是搬到\question
外面:
\documentclass{article}
\usepackage[output=exam,numberofversions=1,version=1,seed=1,randomizeanswers=false,randomizequestions=false]{mcexam}
\begin{document}
\begin{mcquestions}
\question The sky is
\begin{mcanswerslist}
\answer green.
\answer yellow.
\answer[correct] blue.
\end{mcanswerslist}
\question \input{q1.tex}
\question $1+1$ equals
\begin{mcanswerslist}
\answer 1.
\answer[correct] 2.
\answer 3.
\end{mcanswerslist}
\end{mcquestions}
\end{document}
和q1.tex
Who was in the Beatles?
\begin{mcanswerslist}
\answer[correct] John Lennon
\answer Elton John
\answer Buddy Holly
\end{mcanswerslist}