#let cnfont = ("Noto Sans CJK SC", "Noto Sans SC", "Source Han Sans CN") #let cnmainfont = ("Noto Serif CJK SC", "Source Han Serif CN") #let labelfont = ("Atkinson Hyperlegible") #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) = { counter(page).at(loc).first() } #let problem_id = counter("pid") #let identp = h(2em) #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) paper: "iso-b5" ) 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 } }) // show math.equation: set ref(supplement: "式") // show ref: it => { // let eq = math.equation // let el = it.element // if el != none and el.func() == eq { // // Override equation references. // "式 " // str(counter(eq).at(el.location()).at(0)) // } else { // // Other references as usual. // it // } // } 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) [ #set page(footer: locate(loc => { if skip_footer.at(loc) { return } let thispage = thispage_number(loc) let is_mainpart = query(selector().before(loc), loc) != () let footer_content = if is_mainpart { [\##problem_id.at(loc).first() #footer_title.at(loc)] } else { none } let isleft = calc.even(thispage) set align(left) if isleft set align(right) if not isleft set text(font: cnmainfont) stack(dir: if isleft { ltr } else { rtl }, spacing: 1em, str(thispage), [#underline(offset: 2pt, footer_content)] ) })) // Main body. #set par(justify: true) #set text(13pt) #counter(page).update(1) #body ] }