#let cnfont = ("Noto Sans CJK SC", "Noto Sans SC", "Source Han Sans CN") #let cnmainfont = ("Noto Serif CJK SC", "Source Han Serif CN") #let mtext(body) = text(font: cnmainfont, weight: "regular", body) #let tab = h(2em) #let halftab = h(1em) #let footer_title = state("footer_title", "") #let skip_footer = state("skip_footer", false) #let thispage_number(loc) = { let numberstarter = query(, before: loc) if numberstarter == () { none } else { loc.page() - numberstarter.first().location().page() + 1 } } #let problem_id = counter("pid") #let project(title: "", logo: none, body) = { set document(title: title) set text(font: cnmainfont, lang: "zh") set page( width: 195mm, height: 270mm, margin: (top: 20mm) ) show par: set block(above: 1.2em, below: 1.2em) show heading: set text(font: cnfont, weight: "semibold") set list(marker: (sym.square.filled.small, [--]), indent: .5em) set ref(supplement: it => { if it.func() == math.equation { "式" } else { auto } }) set par(leading: 0.75em) v(0.6fr) if logo != none { align(right, image(logo, width: 26%)) } v(9.6fr) text(4em, weight: "light", font: cnfont, title) v(2.4fr) pagebreak() pagebreak() outline(depth: 1) [ #counter(page).update(1) #set page(footer: locate(loc => { if skip_footer.at(loc) { return } let thispage = thispage_number(loc) let is_mainpart = query(, before: loc) != () let is_mainpart = true let footer_content = if is_mainpart { [\##problem_id.at(loc).first() #footer_title.at(loc)] } let isleft = calc.even(thispage) set align(left) if isleft set align(right) if not isleft if isleft { [#thispage] } [ #halftab #underline(offset: 2pt, footer_content) #halftab ] if not isleft { [#thispage] } })) // Main body. #set par(justify: true) #set text(15pt) #body ] }