moodlepackage に小さい浮動小数点値と大きい浮動小数点値を供給する

moodlepackage に小さい浮動小数点値と大きい浮動小数点値を供給する

私は Latex 経由で Moodle XML クイズを作成するために「moodle」パッケージを使用しています。一般的にはうまく動作しますが、問題があります。パッケージに詳しくない場合は、次のように数値環境を使用して数値回答を作成できます。

\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

パッケージは、PDFにmoodle表示するために許容値が0に設定されているかどうかを判断しようとします。このために、パッケージは内部的にTeXの寸法に依存しているため、$\pm$ (tolerance)

このテストを削除することで問題を解決できます。プリアンブルで、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のインポートは両方とも成功します。

関連情報