misc-question/template.typ
2023-05-07 20:31:14 +08:00

88 lines
1.8 KiB
Typst

#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 if it.func() == figure {
""
} else {
"Typset Error!"
}
})
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(<MainStarted>).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
]
}