misc-question/template.typ
szdytom afc6b6349d 初始化与前四个问题
Signed-off-by: szdytom <szdytom@163.com>
2023-04-21 10:40:46 +08:00

87 lines
1.9 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 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(<PageNumberingStated>, 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)
<PageNumberingStated>
#set page(footer: locate(loc => {
if skip_footer.at(loc) {
return
}
let thispage = thispage_number(loc)
let is_mainpart = query(<MainStarted>, 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
]
}