{"id":24258325,"url":"https://github.com/sillyfreak/typst-scrutinize","last_synced_at":"2025-03-04T20:29:45.139Z","repository":{"id":248591283,"uuid":"812754757","full_name":"SillyFreak/typst-scrutinize","owner":"SillyFreak","description":"Build exams, tests, etc. with Typst","archived":false,"fork":false,"pushed_at":"2025-02-20T15:18:27.000Z","size":7225,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-24T02:15:59.809Z","etag":null,"topics":["education","typst","typst-package"],"latest_commit_sha":null,"homepage":"https://typst.app/universe/package/scrutinize","language":"Typst","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SillyFreak.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-09T19:33:39.000Z","updated_at":"2025-02-20T15:18:31.000Z","dependencies_parsed_at":"2024-07-16T00:36:19.511Z","dependency_job_id":"3a87211a-6ea3-4f19-aa19-21902bcd0b71","html_url":"https://github.com/SillyFreak/typst-scrutinize","commit_stats":null,"previous_names":["sillyfreak/typst-scrutinize"],"tags_count":2,"template":false,"template_full_name":"SillyFreak/typst-package-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SillyFreak%2Ftypst-scrutinize","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SillyFreak%2Ftypst-scrutinize/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SillyFreak%2Ftypst-scrutinize/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SillyFreak%2Ftypst-scrutinize/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SillyFreak","download_url":"https://codeload.github.com/SillyFreak/typst-scrutinize/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241917158,"owners_count":20042051,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["education","typst","typst-package"],"created_at":"2025-01-15T05:37:13.263Z","updated_at":"2025-03-04T20:29:45.126Z","avatar_url":"https://github.com/SillyFreak.png","language":"Typst","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Scrutinize\n\nScrutinize is a library for building exams, tests, etc. with Typst.\nIt has three general areas of focus:\n\n- It helps with grading information: record the points that can be reached for each question and make them available for creating grading keys.\n- It provides a selection of question writing utilities, such as multiple choice or true/false questions.\n- It supports the creation of sample solutions by allowing to switch between the normal and \"pre-filled\" exam.\n\nRight now, providing a styled template is not part of this package's scope.\nAlso, visual customization of the provided question templates is currently nonexistent.\n\nSee the [manual](docs/manual.pdf) for details.\n\n## Example\n\n\u003ctable\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n    \u003ca href=\"gallery/example.typ\"\u003e\n      \u003cpicture\u003e\n        \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./thumbnail-dark.svg\"\u003e\n        \u003cimg src=\"./thumbnail-light.svg\"\u003e\n      \u003c/picture\u003e\n    \u003c/a\u003e\n  \u003c/td\u003e\n  \u003ctd\u003e\n    \u003ca href=\"gallery/example.typ\"\u003e\n      \u003cpicture\u003e\n        \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./thumbnail-dark-solved.svg\"\u003e\n        \u003cimg src=\"./thumbnail-light-solved.svg\"\u003e\n      \u003c/picture\u003e\n    \u003c/a\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\nThis example can be found in the [gallery](gallery/). Here are some excerpts from it:\n\n```typ\n#import \"@preview/scrutinize:0.3.0\" as scrutinize: grading, task, solution, task-kinds\n#import task-kinds: free-form, gap, choice\n#import task: t\n\n// ... document setup ...\n\n#context {\n  let ts = task.all(level: 2)\n  let total = grading.total-points(ts)\n\n  let grades = grading.grades(\n    [F],\n    0.6 * total,\n    [D],\n    0.7 * total,\n    [C],\n    0.8 * total,\n    [B],\n    0.9 * total,\n    [A],\n  )\n\n  // ... show the grading key ...\n}\n\n// ...\n\n= Basic competencies -- theoretical part B\n\n#lorem(40)\n\n== Writing\n#t(category: \"b\", points: 4)\n#lorem(30)\n\n#free-form.lines(stretch: 180%, lorem(20))\n\n== Multiple Choice\n#t(category: \"b\", points: 2)\n#lorem(30)\n\n#{\n  set align(center)\n  choice.multiple((\n    (lorem(3), true),\n    (lorem(5), true),\n    (lorem(4), false),\n  ))\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsillyfreak%2Ftypst-scrutinize","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsillyfreak%2Ftypst-scrutinize","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsillyfreak%2Ftypst-scrutinize/lists"}