Randex: Randomized Exams
Randex is a library that creates exams by randomizing multiple-choice questions selected from a user-defined pool of questions. The final exam is generated as a LaTeX document and compiled into a PDF. Multiple exams can be created at once.
🚀 Quick Start
Install randex:
pipx install randex
Download examples with questions:
randex download-examples
Validate the questions in the examples:
randex validate examples/en/folder_* -t examples/en/template-exam.yaml -o tmp --overwrite
Create a batch of exams with random questions:
randex batch "examples/en/folder_*" 5 -n 2 -t examples/en/template-exam.yaml -o tmp --overwrite --clean
Create a csv file with random answers to the exams in the batch:
randex random-answers -e tmp/exams.yaml
Grade the exams in the batch:
randex grade -e tmp/exams.yaml -g tmp/answers.csv
📦 Installation
Randex requires Python version 3.10 or higher and latexmk.
Randex
To install Randex, run:
pipx install randex
latexmk
In order to compile the LaTeX files, you need to install latexmk,
From here:
Latexmk is a Perl script which you just have to run once and it does everything else for you... completely automagically.
and here
Latexmk is also available at CTAN at https://ctan.org/pkg/latexmk/, and is/will be
in the TeXLive and MiKTeX distributions.
If you have already Latex installed in your system, you will most
probably have already latexmk installed as well.
🔧 Randex Commands
randex download-examples
To download the latest examples from GitHub, run the following command:
randex download-examples
randex validate
This command validates a single question or all questions under a folder. Execute:
randex validate "examples/en/folder_*" -t examples/en/template-exam.yaml -o tmp --overwrite
to validate all the questions under the folder examples/en that contains subfolders
with questions.
It will use the configuration from the file examples/en/template-exam.yaml.
The LaTeX compilation will run inside the tmp folder.
The --clean option will remove all intermediate files created by LaTeX,
and the -a flag will show the correct answers in the produced PDF.
Open the PDF file inside tmp to validate that all questions appear correctly.
Run:
randex validate --help
to see the help message for the command.
randex batch
To create a batch of exams with random questions, execute:
randex batch "examples/en/folder_*" 5 -n 2 -t examples/en/template-exam.yaml -o tmp --overwrite --clean
This command will create 5 exams using the questions inside the 3 folders with
names folder_0, folder_1, and folder_2 using the configuration from the file
examples/en/template-exam.yaml.
The --clean option will remove all intermediate files created by LaTeX.
The -n option specifies the number of questions randomly chosen from each folder.
It can appear once, meaning all folders will contribute the same number of questions,
or multiple times, e.g., -n 2 -n 1 -n 3, indicating the first folder will contribute
2 questions, the second folder will contribute 1 question, and the third folder will
contribute 3 questions.
The batch size (5 in this example) specifies the number of exams to create.
Grade
First create a batch of exams in a tmp folder.
Then create a csv file with random answers to the exams,
randex random-answers -e tmp/exams.yaml
Then grade the exams,
randex grade -e tmp/exams.yaml -g tmp/answers.csv
The -n option can be used to specify the negative score for each wrong answer.
If not provided, the negative score is computed as 1 / (number of answers - 1)
for each question.
Set it to 0 to disable the negative scoring.
📁 Randex Data Scheme
Randex requires two types of data files to create the exams.
template-exam.yaml File
The template-exam.yaml file is a YAML file that describes the LaTeX file that will
produce the exam. It contains the following keys:
documentclass(optional): String with the documentclass command of the file. Only theexamclass is supported. Default:\documentclass[11pt]{exam}
prebegin(optional): String containing everything that goes before the\begin{document}command. Default:\usepackage{amsmath} \usepackage{amssymb} \usepackage{bm} \usepackage{geometry} \geometry{ a4paper, total={160mm,250mm}, left=15mm, right=15mm, top=20mm, } \linespread{1.2} \pagestyle{head} \runningheadrule
postbegin(optional): String with all the commands right after the "\begin{document}" command. Default: empty string.preend(optional): String with all the commands right before the "\end{document}" command. Default: empty string.lhead(optional): String that is displayed on the left part of the head. Default: empty stringchead(optional): String that is displayed on the center part of the head. Default: empty string
The right part of the head is reserved for the serial number of the exam.
questions.yaml File
Each question is written in a YAML file with the following keys:
question(required): String with the question. Do not use double quotes around the string.answers(required): List of strings with the answers. Do not use double quotes around the strings.right_answer(required): Integer indicating the correct answer. The answer is non-negative and less than the length of theanswerslist.
The questions YAML files should be organized inside folders.
The randex commands take the template-exam.yaml file and the folders containing the questions as inputs.
📄 License
Licensed under CC BY-NC 4.0. Commercial use is prohibited without prior permission.
Metadata
Release files for randex 0.4.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| randex-0.4.4.tar.gz | 26.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| randex-0.4.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 55.2 kB
Release files / randex-0.4.4.tar.gz
| Download URL | randex-0.4.4.tar.gz |
|---|---|
| Size | 26.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9dabbea57b689d49778e32f13022f52373d676337f9e3564ba97cf95eaf48e69
|
|
BLAKE2b-256 checksum How to use checksums |
25716e73b4266a7663d08cbc19dbba0119546609b784548f1aa5d1483ccc33ce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.3 CPython/3.11.15 Linux/6.17.0-1010-azure
|
Release files / randex-0.4.4-py3-none-any.whl
| Download URL | randex-0.4.4-py3-none-any.whl |
|---|---|
| Size | 28.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a3065d2f9f5ffc10efe7ba9de7718131d5aaefcdc879f83c013f19f70e700d92
|
|
BLAKE2b-256 checksum How to use checksums |
1e13ab76e812fce024b5acd4e045e5aba93d128b0cc27b327af39844efb3ffd1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.3 CPython/3.11.15 Linux/6.17.0-1010-azure
|