Prototype better syntax for QCM

This commit is contained in:
Maxime Augier 2024-05-23 18:43:15 +02:00
parent a04f6296cf
commit f08c30f12b
3 changed files with 25 additions and 4 deletions

Binary file not shown.

View File

@ -1,4 +1,4 @@
#import "@y-sec/exam:0.1.0": exam, question, reponse, choix #import "@y-sec/exam:0.1.0": exam, question, reponse, qcm
#show: exam( #show: exam(
title: "Examen en Typst", title: "Examen en Typst",
subtitle: "Y-Security - Typst Essentials", subtitle: "Y-Security - Typst Essentials",
@ -57,6 +57,12 @@ de la fonction `exam`. La valeur par défaut est:
#question[Préféréz-vous les questions à choix multiples ?] #question[Préféréz-vous les questions à choix multiples ?]
#qcm[
- Clairement oui <yes>
- Pas trop
- La réponse D <yes>
]
= Comptage des points = Comptage des points
#question(points: 5)[Comment changer la valeur en points de la question ?] #question(points: 5)[Comment changer la valeur en points de la question ?]

View File

@ -9,6 +9,7 @@
#let enable_notes = { compile_mode == "notes" }; #let enable_notes = { compile_mode == "notes" };
#let points_counter(h) = { #let points_counter(h) = {
// Find the first heading at a level equal or lower (more important) than this one // Find the first heading at a level equal or lower (more important) than this one
let headings_after = query(selector(heading) let headings_after = query(selector(heading)
@ -26,11 +27,25 @@
// Rend les réponses visibles seulement si compilé avec `--input mode=solution` // Rend les réponses visibles seulement si compilé avec `--input mode=solution`
#let solution(content) = if enable_solutions { set text(fill: olive); content } else { hide(content) } #let solution(content) = if enable_solutions { set text(fill: olive); content } else { hide(content) }
#let choix(rep, content) = { #let qcm(qcm_list) = {
if rep and solution_mode { "☒ " } else { "☐ " } //let checked_box = "☑";
content //let unchecked_box = "☐";
let checked_box = box(stroke: black, outset: 0.2em, "X") + " ";
let unchecked_box = box(stroke: black, outset: 0.2em, hide("X")) + " ";
set list(marker: unchecked_box, indent: 2em)
if enable_solutions {
show <yes>: i => {
show box: b => checked_box;
set text(fill: olive);
i
};
qcm_list
} else {
qcm_list
}
} }
#let exam(title: "Exam", course: none, date: none, class: none, #let exam(title: "Exam", course: none, date: none, class: none,
year: none, author: none, subtitle: none, indications: none, year: none, author: none, subtitle: none, indications: none,
time: none, allowed: none) = doc => { time: none, allowed: none) = doc => {