CASengine

The program, together with a larva of documentation, is at https://github.com/dlfer/casengine

It is worth considering it for authoring MOODLE questions. For authoring multiple choice questions in LaTeX, I suggest using just mcq.py. For open questions, on the other hand, casengine.py may more not that unuseful.

For example, consider the following example file:

%===================================================================
\documentclass[twoside,a4paper,leqno]{article}
%===================================================================
\usepackage{mathpazo} % I like it.
\usepackage[sol,doexe]{mcq}
\usepackage{polyglossia}
\setdefaultlanguage{english} %% it needs to be *after* mcq.

\usepackage{casengine}

%===================================================================
\begin{document}

\begin{esercizi*}{}

\begin{exe}
\begin{varianti}
\begin{symfor}{q}{range(2,6)}
\begin{symfor}{x}{cos(t); sin(t); exp(t); t**2 - 2 * t}
\symexec{g=x+q*t}
\symexec{gp=Derivative(expand(g))}
\varitem
Compute $\displaystyle \sym{gp}$.
\blank{$\sym{simplify(gp.doit())}$}
\end{symfor}
\end{symfor}
\end{varianti}
\end{exe}


\end{esercizi*}

\end{document}

Using the casengine.py one obtains an expanded file, with all exercises (and solutions), as in the output file. How to produce the 16 related There are two nested for cycles, with 4 iterations each: hence 16 varied questions.

The GIFT output, produced by mcq.py is the following:

// [Var. 1]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(2 t + \\cos\{\\left (t \\right )\}\\right)$.
{}

// [Var. 2]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(2 t + \\sin\{\\left (t \\right )\}\\right)$.
{}

// [Var. 3]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(2 t + e^\{t\}\\right)$.
{}

// [Var. 4]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\} t^\{2\}$.
{}

// [Var. 5]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(3 t + \\cos\{\\left (t \\right )\}\\right)$.
{}

// [Var. 6]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(3 t + \\sin\{\\left (t \\right )\}\\right)$.
{}

// [Var. 7]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(3 t + e^\{t\}\\right)$.
{}

// [Var. 8]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(t^\{2\} + t\\right)$.
{}

// [Var. 9]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(4 t + \\cos\{\\left (t \\right )\}\\right)$.
{}

// [Var. 10]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(4 t + \\sin\{\\left (t \\right )\}\\right)$.
{}

// [Var. 11]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(4 t + e^\{t\}\\right)$.
{}

// [Var. 12]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(t^\{2\} + 2 t\\right)$.
{}

// [Var. 13]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(5 t + \\cos\{\\left (t \\right )\}\\right)$.
{}

// [Var. 14]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(5 t + \\sin\{\\left (t \\right )\}\\right)$.
{}

// [Var. 15]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(5 t + e^\{t\}\\right)$.
{}

// [Var. 16]
[html]Compute $\\displaystyle \\frac\{d\}\{d t\}\\left(t^\{2\} + 3 t\\right)$.
{}

If one does not have a moodle installation with mathjax, or just prefers to handle PDF files, do as follows.

First generate all permutations with mcq.py (and the doexe option). This will produce a nice exam_out_exam.pdf. Use then qpdf to split the file (renaming it if necessary) and shuffle the result as needed:

$ qpdf --split-pages=4 exam_out_exam.pdf output.pdf

It is not really a stable piece of software, but can leverage all Computer Algebra Systems to author question banks. It is similar to a static site generator (such as hugo, jeckyll, …) compared to a dynamic CMS (which in moodle assessments might be for example the STACK system.