向 moodlepackage 提供小浮点值和大浮点值

向 moodlepackage 提供小浮点值和大浮点值

我正在使用“moodle”包通过 Latex 创建 Moodle XML 测验。通常情况下,它工作得很好,但我遇到了问题。如果您不熟悉该包,我可以使用环境数值来创建数字答案,如下所示:

\begin{numerical}
What is 2+2?
\item[tolerance=0.5] 4
\end{numerical}

这一切都运行良好,该包生成一个 PDF 和一个 XML 文件,可以上传到我的 Moodle 网站。但如果我使用带有科学记数法的值,就会出现问题,例如

\begin{numerical}
What is the charge on an electron?
\item[tolerance=1e-20] 1.602e-19
\end{numerical}

在这种情况下,它会抱怨“e”是一个非法的测量单位,而它使用的是“pt”。我搜索得不太顺利,我不认为这是一个广泛使用的包,也不认为它正在积极开发中。这可能是包问题吗,还是有特定的格式用于为这样的 latex 参数输入科学计数法数字?这可能吗!?我试过大写和小写的“e”

答案1

moodle包尝试确定容差是否设置为 0,以便$\pm$ (tolerance)在 PDF 中显示。为此,该包内部依赖于 TeX 的尺寸

删除这个测试即可解决问题。在序言中,加载moodle包后,添加以下代码:

\makeatletter
\def\moodle@print@numerical@answer@int@int#1\@rdelim{%
  \edef\moodle@numericalprint@tolerance{\noexpand\pm\moodle@tolerance}%
  \ifx\moodle@fraction\@hundred
    \item $#1\moodle@numericalprint@tolerance\quad\checkmark$%
  \else
    \item $#1\moodle@numericalprint@tolerance$\quad (\moodle@fraction\%)%
  \fi
}%
\def\moodle@print@clozenumerical@answer@int@int#1\@rdelim{%
  \ifx\moodle@fraction\@hundred
    \def\moodle@clozenumericalprint@fraction{$\checkmark$}%
  \else
    \edef\moodle@clozenumericalprint@fraction{(\moodle@fraction\%)}%
  \fi
    \edef\moodle@clozenumericalprint@tolerance{\noexpand\pm\moodle@tolerance}%
  \xdef\moodle@clozenumericalprint@line{$#1\moodle@clozenumericalprint@tolerance$
   & \moodle@clozenumericalprint@fraction}%
  \xa\g@addto@macro\xa\cloze@numerical@table@text\xa{\moodle@clozenumericalprint@line
   \\}%
}%
\makeatother

编译和 Moodle 导入都将成功。

相关内容