For part/chapter/normal headings, you can re-use Part independent section - #6 by Andrew. I don’t understand if the numbering is supposed to be automatic or not exist at all (to confuse readers).
#let chapter-count = counter("chapter counter")
#show heading.where(level: 2): it => chapter-count.step() + it
#set heading(numbering: (..nums) => {
if nums.pos().len() == 1 {
numbering("I.", ..nums) // Part
} else if nums.pos().len() == 2 {
numbering("1.", chapter-count.get().first() + 1) // Chapter
} else {
numbering("1.", ..chapter-count.get(), ..nums.pos().slice(2))
}
})
#show heading.where(level: 1): it => if it.body == [Contents] { it } else {
set align(center + horizon)
set text(36pt)
pagebreak(weak: true) + it
}
#show heading.where(level: 2): set text(22pt)
#show heading.where(level: 2): set align(center)
#show heading.where(level: 2): it => pagebreak(weak: true) + emph(it)
#outline(target: selector.or(heading.where(level: 1), heading.where(level: 2)))
= Part One
== Chapter One
=== Section
== Chapter Two
= Part Two
== Chapter Three
=== Section
=== Section
==== Subsection
==== Subsection
= Part Three
== Chapter Four