Introduce cmarker/codly-based MD workflow, brutalist cover layout, and shared brand tokens so colleagues can author reports in report.md while the template handles PDF output. Co-authored-by: Cursor <cursoragent@cursor.com>
52 lines
1.3 KiB
Plaintext
52 lines
1.3 KiB
Plaintext
#import "theme.typ": *
|
|
|
|
/// 点阵底纹
|
|
#let tech-dots(width: 100%, height: 100%, step: 10pt) = box(width: width, height: height, clip: true)[
|
|
#for x in range(40) {
|
|
for y in range(40) {
|
|
place(
|
|
left + top,
|
|
dx: x * step,
|
|
dy: y * step,
|
|
circle(radius: 0.35pt, fill: color-grid),
|
|
)
|
|
}
|
|
}
|
|
]
|
|
|
|
/// 条形码条
|
|
#let tech-barcode(width, height, bars: 28) = box(width: width, height: height, clip: true)[
|
|
#for i in range(bars) {
|
|
let w = if calc.rem(i, 4) == 0 { 2.2pt } else if calc.rem(i, 2) == 0 { 1.4pt } else { 0.8pt }
|
|
place(
|
|
left + top,
|
|
dx: i * (width / bars),
|
|
box(width: w, height: 100%, fill: color-ink),
|
|
)
|
|
}
|
|
]
|
|
|
|
/// 等宽标签
|
|
#let tech-label(body, fill: color-ink, size: 7pt) = text(
|
|
font: mono-font,
|
|
size: size,
|
|
fill: fill,
|
|
tracking: 0.14em,
|
|
)[#body]
|
|
|
|
/// 章节编号
|
|
#let section-tech-id(..nums) = {
|
|
let n = nums.pos()
|
|
let id = if n.len() == 1 {
|
|
let num = n.first()
|
|
if num < 10 { "0" + str(num) } else { str(num) }
|
|
} else if n.len() == 2 {
|
|
str(n.at(0)) + "." + str(n.at(1))
|
|
} else {
|
|
str(n.at(0)) + "." + str(n.at(1)) + "." + str(n.at(2))
|
|
}
|
|
box(fill: color-neon, inset: (x: 5pt, y: 2pt))[
|
|
#text(font: mono-font, size: 7pt, weight: "bold", fill: color-ink)[#id]
|
|
]
|
|
}
|