diff --git a/scribble-lib/scribble/base-render.rkt b/scribble-lib/scribble/base-render.rkt index 7adf532e..1eded97b 100644 --- a/scribble-lib/scribble/base-render.rkt +++ b/scribble-lib/scribble/base-render.rkt @@ -606,17 +606,28 @@ number)) sub-pos sub-numberers)) + (define unnumbered-and-unnumbered-subsections? + (and (not sub-grouper?) + ;; If this section wasn't marked with + ;; 'grouper but is unnumbered and doesn't + ;; have numbered subsections, then didn't + ;; reset counters, so propagate the old + ;; position + (and unnumbered? + (= next-sub-pos sub-pos)))) (loop (cdr parts) (if (or unnumbered? numberer) pos (add1 pos)) next-numberers - (if sub-grouper? - next-sub-pos - 1) - (if sub-grouper? - next-sub-numberers - #hash()))))))) + (cond + [sub-grouper? next-sub-pos] + [unnumbered-and-unnumbered-subsections? sub-pos] + [else 1]) + (cond + [sub-grouper? next-sub-numberers] + [unnumbered-and-unnumbered-subsections? sub-numberers] + [else #hash()]))))))) (let ([prefix (part-tag-prefix d)]) (for ([(k v) (collect-info-ht p-ci)]) (when (cadr k) diff --git a/scribble-test/tests/scribble/docs/grouper2.scrbl b/scribble-test/tests/scribble/docs/grouper2.scrbl new file mode 100644 index 00000000..4fc76336 --- /dev/null +++ b/scribble-test/tests/scribble/docs/grouper2.scrbl @@ -0,0 +1,29 @@ +#lang scribble/base + +@title{Example} + +@table-of-contents[] + +@; ---------------------------------------- + +@section[#:style 'grouper]{Arbitrarily Small Data} + +@subsection[#:tag "A"]{A} + +See @secref["A"] and @secref["B"]. + +@; ---------------------------------------- + +@section[#:style '(unnumbered)]{Intermezzo} + +@subsection[#:style '(unnumbered)]{More} + +Nothing here. + +@; ---------------------------------------- + +@section[#:style 'grouper]{Arbitrarily Large Data} + +@subsection[#:tag "B"]{B} + +See @secref["A"] and @secref["B"]. diff --git a/scribble-test/tests/scribble/docs/grouper2.txt b/scribble-test/tests/scribble/docs/grouper2.txt new file mode 100644 index 00000000..56fa0df4 --- /dev/null +++ b/scribble-test/tests/scribble/docs/grouper2.txt @@ -0,0 +1,28 @@ +Example + +    I Arbitrarily Small Data +      1 A + +    Intermezzo +      More + +    II Arbitrarily Large Data +      2 B + +I. Arbitrarily Small Data + +1. A + +See A and B. + +Intermezzo + +More + +Nothing here. + +II. Arbitrarily Large Data + +2. B + +See A and B.