diff --git a/library/src/meta/counter.rs b/library/src/meta/counter.rs index b61e89133..27fd548fb 100644 --- a/library/src/meta/counter.rs +++ b/library/src/meta/counter.rs @@ -277,8 +277,8 @@ impl Counter { if is_page { let page = introspector.page(id); let delta = page.get() - prev_page.get(); - if let Some(delta) = NonZeroUsize::new(delta) { - state.step(delta); + if delta > 0 { + state.step(NonZeroUsize::ONE, delta); } prev_page = page; } @@ -354,7 +354,7 @@ impl CounterState { pub fn update(&mut self, vt: &mut Vt, update: CounterUpdate) -> SourceResult<()> { match update { CounterUpdate::Set(state) => *self = state, - CounterUpdate::Step(level) => self.step(level), + CounterUpdate::Step(level) => self.step(level, 1), CounterUpdate::Func(func) => { *self = func .call_vt(vt, self.0.iter().copied().map(Into::into))? @@ -365,12 +365,12 @@ impl CounterState { Ok(()) } - /// Advance the top level number by the specified amount. - pub fn step(&mut self, level: NonZeroUsize) { + /// Advance the number of the given level by the specified amount. + pub fn step(&mut self, level: NonZeroUsize, by: usize) { let level = level.get(); if self.0.len() >= level { - self.0[level - 1] = self.0[level - 1].saturating_add(1); + self.0[level - 1] = self.0[level - 1].saturating_add(by); self.0.truncate(level); } diff --git a/tests/ref/meta/counter-page.png b/tests/ref/meta/counter-page.png index 62f663cc2..869718bca 100644 Binary files a/tests/ref/meta/counter-page.png and b/tests/ref/meta/counter-page.png differ diff --git a/tests/typ/meta/counter-page.typ b/tests/typ/meta/counter-page.typ index b45a26f39..54134b6e5 100644 --- a/tests/typ/meta/counter-page.typ +++ b/tests/typ/meta/counter-page.typ @@ -1,6 +1,7 @@ // Test the page counter. #set page(height: 50pt, margin: (bottom: 20pt, rest: 10pt)) +#lorem(12) #set page(numbering: "(i)") #lorem(6) #pagebreak()