https://github.com/sillyfreak/typst-scrutinize
Build exams, tests, etc. with Typst
https://github.com/sillyfreak/typst-scrutinize
education typst typst-package
Last synced: 2 months ago
JSON representation
Build exams, tests, etc. with Typst
- Host: GitHub
- URL: https://github.com/sillyfreak/typst-scrutinize
- Owner: SillyFreak
- License: mit
- Created: 2024-06-09T19:33:39.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-02-20T15:18:27.000Z (2 months ago)
- Last Synced: 2025-02-24T02:15:59.809Z (2 months ago)
- Topics: education, typst, typst-package
- Language: Typst
- Homepage: https://typst.app/universe/package/scrutinize
- Size: 6.89 MB
- Stars: 8
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Scrutinize
Scrutinize is a library for building exams, tests, etc. with Typst.
It has three general areas of focus:- It helps with grading information: record the points that can be reached for each question and make them available for creating grading keys.
- It provides a selection of question writing utilities, such as multiple choice or true/false questions.
- It supports the creation of sample solutions by allowing to switch between the normal and "pre-filled" exam.Right now, providing a styled template is not part of this package's scope.
Also, visual customization of the provided question templates is currently nonexistent.See the [manual](docs/manual.pdf) for details.
## Example
This example can be found in the [gallery](gallery/). Here are some excerpts from it:
```typ
#import "@preview/scrutinize:0.3.0" as scrutinize: grading, task, solution, task-kinds
#import task-kinds: free-form, gap, choice
#import task: t// ... document setup ...
#context {
let ts = task.all(level: 2)
let total = grading.total-points(ts)let grades = grading.grades(
[F],
0.6 * total,
[D],
0.7 * total,
[C],
0.8 * total,
[B],
0.9 * total,
[A],
)// ... show the grading key ...
}// ...
= Basic competencies -- theoretical part B
#lorem(40)
== Writing
#t(category: "b", points: 4)
#lorem(30)#free-form.lines(stretch: 180%, lorem(20))
== Multiple Choice
#t(category: "b", points: 2)
#lorem(30)#{
set align(center)
choice.multiple((
(lorem(3), true),
(lorem(5), true),
(lorem(4), false),
))
}
```