From c29229828cc77013e62e9911fc1d1177e388d491 Mon Sep 17 00:00:00 2001 From: Rasmus Buurman Date: Tue, 20 Jan 2026 20:15:26 +0100 Subject: [PATCH 1/2] Add `theorem-counter-reset` option for (sub)tasks --- CHANGELOG.md | 1 + examples/task-config.typ | 11 +++++++++-- src/task.typ | 14 ++++++++++++++ tests/examples/task-config/ref/1.png | Bin 28353 -> 35156 bytes tests/examples/task-config/test.typ | 11 +++++++++-- 5 files changed, 33 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b00bfaf..70cd62d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - Added `subtask` system - Added an argument `todo` in `#task` to mark task with TODO - Added `definition` environment and `example` environment +- Added `theorem-counter-reset` option for `task` and `subtask` ## [0.4.0] - 2025-11-22 diff --git a/examples/task-config.typ b/examples/task-config.typ index 0280c9f..c086edb 100644 --- a/examples/task-config.typ +++ b/examples/task-config.typ @@ -1,4 +1,4 @@ -#import "@preview/sheetstorm:0.4.0": assignment, subtask, task +#import "@preview/sheetstorm:0.4.0": assignment, subtask, task, theorem #show: assignment.with( title: "Task Configuration Example", @@ -10,6 +10,7 @@ // You can customize the task/subtask functions like so: #let task = task.with( todo-show: false, + theorem-counter-reset: true, ) #let subtask = subtask.with( numbering: ("a.", "i."), @@ -33,8 +34,14 @@ #task(counter-show: false, name: "Name")[ You can disable the task number in the title. + + #theorem[First theorem of the task.] ] -#task(hidden: true, counter: 7)[This task is hidden in the score box.] +#task(hidden: true, counter: 7)[ + This task is hidden in the score box. + + #theorem[Also the theorem counter was automatically reset.] +] #task(counter: n => n + 1)[This would be task 8 but now it is task 9.] diff --git a/src/task.typ b/src/task.typ index b01a56f..215e9e3 100644 --- a/src/task.typ +++ b/src/task.typ @@ -88,6 +88,8 @@ bonus-show-star: true, /// Whether the task is hidden in the score box. -> bool hidden: false, + /// Whether to reset the theorem counter at the start of the task. -> bool + theorem-counter-reset: false, /// Padding above the task. -> auto | length space-above: auto, /// Padding below the task. -> auto | length @@ -110,6 +112,10 @@ c("sheetstorm-todo").step() } + if theorem-counter-reset { + c("sheetstorm-theorem-count").update(1) + } + let maybe-todo = context { let curr-task = query(selector().before(here())) .last() @@ -216,6 +222,8 @@ /// /// -> bool numbering-cycle: false, + /// Whether to reset the theorem counter at the start of the subtask. -> bool + theorem-counter-reset: false, /// The minimum indent of the subtask body. /// /// The indent of the subtask body is the maximum of this value and the width of the marker. @@ -225,6 +233,8 @@ /// The body of the subtask. -> content content, ) = { + let c = std.counter + if counter != auto { state("sheetstorm-subtask").update(xs => { let x = xs.pop() @@ -237,6 +247,10 @@ }) } + if theorem-counter-reset { + c("sheetstorm-theorem-count").update(1) + } + let marker = if marker != auto { marker } else { context { let depth = state("sheetstorm-subtask").get().len() - 1 diff --git a/tests/examples/task-config/ref/1.png b/tests/examples/task-config/ref/1.png index f2859488f5ef241b0e88f106e8ee7095088325a7..994c8fe6cf8edfd6624fc32e79a0930683615877 100644 GIT binary patch delta 15734 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 moEZ!DYl{A#`y#}zS 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

<0(;R6Zk17?Hg zH0Qsd{68zXXmpBn19_Yd%4fV|spIoTOtoBU8|b_17Fk64_E4% z(kTUZETD+f0N2}O65S7i5i#`ydb3vG~1ETQ0c zW|76y2cgObo2)I24SO?Lw9i+(KeQAjK2wOxhGIhbK=!sJeQ~aj!mj`aFuHkY^f)GV zhc9M>{bp!Tsv@1E#dR@+41sCknUx1GQlXsv=56{6AQo~5RUrsKb{va^{DBB!R+RH` zQQV^r(#z(mN*HA6O+@fnO*Ud#eh5$Xt>H5M3p?|iRhP-a;GWm?+osM6llH1+i$O1D z7f${7FuL`RjkWXEJTNTT{MMs3yX})uD^sUxJn33~jTa<0OQHm@sG$D#`%yr;$HR=8 zH(*>1G+FTs=QKM(QePBohGKR6mf}895-k)l?uUDSz~(C~yvBE4Wj{4fWq$DMgqSFK zFXg76&RUI;Z3OXBmqx`;Zcd>AaZs8mIb_Ko`Ra&!pT#@{ca1T$bYPtETM2IUPtTcJ zQ$E$SKDhli>dH>i`iAR_I}o34CF zrzN*`tTB0PG;r(_iM6cYSRi6`RU5c(7l88n&hVy4*CG?IifwIwe8ih`yy`H~^h5Ut z=w$)7%-05+#pCui0SgxkGY(9zWKGs;A zc>ANpyw+gte%5~Sub)b-I{&}zW++{^t;az zEkzqwEX5p`0Qdja+0lnR5xg;`= z(FGU?1yAZKR-J?rN-6y^!KL_&h*|jawa-&G-dbL=U_hJyFPCVh1EOS zz8focw@MqEBKHGZI-mGHXk^z71M;ZC%$+|#3r(u%|H-ESf&7tZV4-@v??Sz!|6M+a M5>&BT-aO=g04&{q(f|Me diff --git a/tests/examples/task-config/test.typ b/tests/examples/task-config/test.typ index 38222be..b825967 100644 --- a/tests/examples/task-config/test.typ +++ b/tests/examples/task-config/test.typ @@ -1,4 +1,4 @@ -#import "@local/sheetstorm:0.4.0": assignment, subtask, task +#import "@local/sheetstorm:0.4.0": assignment, subtask, task, theorem #show: assignment.with( title: "Task Configuration Example", @@ -10,6 +10,7 @@ // You can customize the task/subtask functions like so: #let task = task.with( todo-show: false, + theorem-counter-reset: true, ) #let subtask = subtask.with( numbering: ("a.", "i."), @@ -33,8 +34,14 @@ #task(counter-show: false, name: "Name")[ You can disable the task number in the title. + + #theorem[First theorem of the task.] ] -#task(hidden: true, counter: 7)[This task is hidden in the score box.] +#task(hidden: true, counter: 7)[ + This task is hidden in the score box. + + #theorem[Also the theorem counter was automatically reset.] +] #task(counter: n => n + 1)[This would be task 8 but now it is task 9.] From 6080ca0b0c4048a617834bae73e6e60c28a799ff Mon Sep 17 00:00:00 2001 From: Rasmus Buurman Date: Sat, 24 Jan 2026 18:02:03 +0100 Subject: [PATCH 2/2] Format --- src/task.typ | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/task.typ b/src/task.typ index c92531c..d7057bd 100644 --- a/src/task.typ +++ b/src/task.typ @@ -325,7 +325,7 @@ ..body-args, ) = { let c = std.counter - + assert(body-args.named().len() == 0, message: "Unexpected named argument.") assert( body-args.pos().len() == 1 or body-args.pos().len() == 2, @@ -350,7 +350,6 @@ }) } - if skip != none and type(skip) == int { state("sheetstorm-subtask").update(xs => { let x = xs.pop() @@ -358,7 +357,7 @@ xs }) } - + if theorem-counter-reset { c("sheetstorm-theorem-count").update(1) }