88 lines
1.8 KiB
Typst
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
|
|
]
|
|
} |