Is it important that the heading (“Part One: Fundamentals”) be the same element as the title page (“Fundamentals”)? If not, you could define your own function that places the heading, then places the title page:
#import "@preview/name-it:0.1.0": name-it
#let title-case(word) = {
upper(word.slice(0, 1))
word.slice(1)
}
#let make-title(body) = {
set align(center + horizon)
set text(size: 30pt)
body
}
#let heading-and-title(body) = {
pagebreak(weak: true)
set align(center)
set text(size: 12pt, weight: "regular")
heading(body, numbering: (params) => "Part " + title-case(name-it(params)) + ": ")
make-title(body)
}
#outline()
#heading-and-title[Fundamentals]
#lorem(50)
== More details
#lorem(50)
#heading-and-title[Other]
#lorem(50)
This way when other parts of your document go looking for level one headings it only finds what was created by the call to heading(...) in heading-and-title().
As for counting in German, I don’t know of any Typst Universe package that does that. If you can generate the “Eins”, “Zwei”, etc… in your Python script, then you could modify heading-and-title() to accept another parameter then insert it into the numbering:
#let heading-and-title(part-num, body) = {
pagebreak(weak: true)
set align(center)
set text(size: 12pt, weight: "regular")
heading(body, numbering: (params) => "Part " + part-num + ":")
make-title(body)
}
//Call it like this:
#heading-and-title[Zwei][Würst]