Introduce tech-report/ with cover page, custom TOC, and summary flow; add travel-plan/ for trip planning; update README, gitignore, and brand colors. Co-authored-by: Cursor <cursoragent@cursor.com>
258 lines
7.6 KiB
Plaintext
258 lines
7.6 KiB
Plaintext
#import "theme.typ": *
|
|
|
|
#let format-cover-date(date, fallback) = {
|
|
if date != none {
|
|
date.display("[year].[month repr:numerical].[day]")
|
|
} else if type(fallback) == str {
|
|
fallback
|
|
} else {
|
|
str(fallback)
|
|
}
|
|
}
|
|
|
|
#let cover-title-lines(title) = {
|
|
let marker = "智能"
|
|
let m = title.match(regex(marker))
|
|
if m == none {
|
|
(title, none)
|
|
} else {
|
|
let end = m.end
|
|
let line-2 = title.slice(end)
|
|
if line-2.len() > 0 {
|
|
(title.slice(0, end), line-2)
|
|
} else {
|
|
(title, none)
|
|
}
|
|
}
|
|
}
|
|
|
|
#let cover-title-block(line-1, line-2) = {
|
|
block(breakable: false, spacing: 0pt)[
|
|
#text(
|
|
font: heading-font,
|
|
size: size-cover-title,
|
|
weight: "bold",
|
|
fill: cover-panel-title-color,
|
|
hyphenate: false,
|
|
top-edge: "cap-height",
|
|
bottom-edge: "baseline",
|
|
)[#line-1]
|
|
#if line-2 != none [
|
|
#move(dy: cover-panel-title-pull)[
|
|
#text(
|
|
font: heading-font,
|
|
size: size-cover-title-line2,
|
|
weight: "bold",
|
|
fill: cover-panel-title-color,
|
|
hyphenate: false,
|
|
top-edge: "cap-height",
|
|
bottom-edge: "baseline",
|
|
)[#line-2]
|
|
]
|
|
]
|
|
]
|
|
}
|
|
|
|
#let cover-logo() = {
|
|
let mark = cover-logo-size * 0.64
|
|
let offset = cover-logo-size * 0.36
|
|
box(width: cover-logo-size, height: cover-logo-size)[
|
|
#place(left + top)[
|
|
#rect(width: mark, height: mark, fill: color-primary)
|
|
]
|
|
#place(left + top, dx: offset, dy: offset)[
|
|
#rect(width: mark, height: mark, fill: none, stroke: 1.5pt + color-primary)
|
|
]
|
|
]
|
|
}
|
|
|
|
#let cover-quote-mark() = {
|
|
text(
|
|
font: heading-font,
|
|
size: cover-quote-size,
|
|
fill: cover-quote-color,
|
|
)[”]
|
|
}
|
|
|
|
#let cover-panel-footer(meta, date-text) = {
|
|
block(width: 100%, breakable: false)[
|
|
#text(font: heading-font, size: cover-panel-author-size, weight: "bold", fill: cover-panel-title-color)[
|
|
#meta.company
|
|
]
|
|
#v(cover-panel-text-gap * 0.25)
|
|
#text(font: body-font, size: cover-panel-role-size, fill: cover-panel-subtitle-color)[
|
|
技术报告 · #meta.version
|
|
]
|
|
#v(cover-panel-role-gap-before-line)
|
|
#block(width: 100%, breakable: false)[
|
|
#place(right + top)[
|
|
#cover-quote-mark()
|
|
]
|
|
#block(width: 100%, inset: (right: cover-quote-clearance))[
|
|
#line(length: cover-panel-footer-line-length, stroke: cover-panel-footer-rule-stroke + cover-panel-footer-line-color)
|
|
#v(cover-panel-meta-gap-after-line)
|
|
#grid(
|
|
columns: (auto, auto, auto),
|
|
column-gutter: cover-panel-meta-column-gap,
|
|
align: (left, center + horizon, left),
|
|
[
|
|
#text(font: body-font, size: cover-panel-meta-label, fill: cover-panel-meta-color)[
|
|
报告版本
|
|
]
|
|
#v(tw(0.5))
|
|
#text(font: body-font, size: cover-panel-meta-size, fill: cover-panel-title-color)[
|
|
#meta.version
|
|
]
|
|
],
|
|
box(width: cover-panel-meta-divider-width, height: tw(8), fill: cover-panel-footer-line-color),
|
|
[
|
|
#text(font: body-font, size: cover-panel-meta-label, fill: cover-panel-meta-color)[
|
|
发布日期
|
|
]
|
|
#v(tw(0.5))
|
|
#text(font: body-font, size: cover-panel-meta-size, fill: cover-panel-title-color)[
|
|
#date-text
|
|
]
|
|
],
|
|
)
|
|
]
|
|
]
|
|
]
|
|
}
|
|
|
|
#let cover-panel-bottom(meta, date-text) = {
|
|
cover-panel-footer(meta, date-text)
|
|
}
|
|
|
|
#let cover-below-panel(meta, date-text) = {
|
|
block(height: cover-band-height)[
|
|
#pad(left: cover-footer-inset)[
|
|
#align(horizon)[
|
|
#grid(
|
|
columns: (auto, auto, auto),
|
|
column-gutter: cover-footer-column-gap,
|
|
align: bottom,
|
|
[
|
|
#text(font: heading-font, size: cover-footer-label, weight: "bold", fill: cover-footer-heading)[
|
|
单位
|
|
]
|
|
#v(cover-footer-line-gap)
|
|
#text(font: body-font, size: cover-footer-body, fill: cover-footer-text)[
|
|
#meta.company
|
|
]
|
|
#v(cover-footer-line-gap-tight)
|
|
#text(font: body-font, size: cover-footer-note, fill: cover-text-muted)[
|
|
智能矿石分选 · 技术方案与工程实施
|
|
]
|
|
],
|
|
box(width: 1pt, height: cover-footer-divider-height, fill: cover-footer-rule),
|
|
[
|
|
#text(font: heading-font, size: cover-footer-label, weight: "bold", fill: cover-footer-heading)[
|
|
信息
|
|
]
|
|
#v(cover-footer-line-gap)
|
|
#text(font: body-font, size: cover-footer-body, fill: cover-footer-text)[
|
|
文档类型 技术报告
|
|
]
|
|
#v(cover-footer-line-gap-tight)
|
|
#text(font: body-font, size: cover-footer-note, fill: cover-text-muted)[
|
|
#meta.brand · #meta.version · #date-text
|
|
]
|
|
],
|
|
)
|
|
]
|
|
]
|
|
]
|
|
}
|
|
|
|
#let cover-page(meta, date: none) = {
|
|
let date-text = format-cover-date(date, meta.date)
|
|
let (title-line-1, title-line-2) = cover-title-lines(meta.title)
|
|
|
|
page(
|
|
paper: "a4",
|
|
margin: page-margin-cover,
|
|
fill: cover-bg,
|
|
header: none,
|
|
footer: none,
|
|
)[
|
|
#block(width: 100%, height: cover-body-height)[
|
|
#block(height: cover-band-height)[
|
|
#pad(left: cover-content-inset)[
|
|
#align(horizon)[
|
|
#grid(
|
|
columns: (auto, 1fr),
|
|
column-gutter: tw(3),
|
|
align: horizon,
|
|
cover-logo(),
|
|
[
|
|
#text(font: heading-font, size: cover-brand-size, weight: "bold", fill: cover-text)[
|
|
#meta.brand
|
|
]
|
|
#v(cover-footer-line-gap)
|
|
#text(font: body-font, size: cover-tagline-size, fill: cover-text-muted)[
|
|
#meta.company
|
|
]
|
|
],
|
|
)
|
|
]
|
|
]
|
|
]
|
|
|
|
#v(cover-header-gap)
|
|
|
|
#pad(right: cover-panel-right-gap)[
|
|
#block(width: 100%, height: cover-panel-height, fill: cover-panel-fill)[
|
|
#pad(
|
|
left: cover-content-inset,
|
|
right: cover-margin-right,
|
|
top: cover-panel-inset-y,
|
|
bottom: cover-panel-inset-bottom-y,
|
|
)[
|
|
#block(width: 100%, height: 100%)[
|
|
#place(top + left)[
|
|
#block(width: 100%)[
|
|
#text(
|
|
font: heading-font,
|
|
size: cover-panel-kicker,
|
|
weight: "medium",
|
|
fill: cover-panel-kicker-color,
|
|
tracking: 0.08em,
|
|
)[TECHNICAL REPORT · 技术报告]
|
|
|
|
#v(cover-panel-title-outer-gap)
|
|
#cover-title-block(title-line-1, title-line-2)
|
|
|
|
#v(cover-panel-title-outer-gap)
|
|
#text(
|
|
font: heading-font,
|
|
size: size-cover-subtitle,
|
|
fill: cover-panel-subtitle-color,
|
|
tracking: 0.04em,
|
|
)[INTELLIGENT ORE SORTING · 智能矿石分选]
|
|
]
|
|
]
|
|
|
|
#place(left + horizon)[
|
|
#line(
|
|
length: cover-panel-rule-width,
|
|
stroke: cover-panel-accent-stroke + cover-panel-divider-color,
|
|
)
|
|
]
|
|
|
|
#place(bottom + left)[
|
|
#block(width: 100%, breakable: false)[
|
|
#cover-panel-bottom(meta, date-text)
|
|
]
|
|
]
|
|
]
|
|
]
|
|
]
|
|
]
|
|
|
|
#v(cover-below-gap)
|
|
#cover-below-panel(meta, date-text)
|
|
]
|
|
]
|
|
}
|