make entire template usable & finish dijkstra project
This commit is contained in:
+174
-22
@@ -7,7 +7,7 @@
|
||||
#let font-display = ("Source Serif 4 Display", "Source Han Serif K")
|
||||
#let font-subhead = ("Source Serif 4 Subhead", "Source Han Serif K")
|
||||
#let font-caption = ("Source Serif 4 Caption", "Source Han Serif K")
|
||||
// #let font-code =
|
||||
#let font-code = ("Source Code Pro", "Pretendard")
|
||||
|
||||
#let color-surface = white
|
||||
#let color-ink = color.oklch(22%, 0.01, 250deg)
|
||||
@@ -52,12 +52,14 @@
|
||||
),
|
||||
)
|
||||
|
||||
#let evidence-data = state("evidence-data", none)
|
||||
|
||||
|
||||
// ==================================================
|
||||
// Util functions
|
||||
// ==================================================
|
||||
|
||||
#let pad-zeros(num, width) = {
|
||||
#let pad_zeros(num, width) = {
|
||||
let s = str(num)
|
||||
"0" * calc.max(0, width - s.len()) + s
|
||||
}
|
||||
@@ -77,17 +79,33 @@
|
||||
}
|
||||
|
||||
#let heading_text(it) = {
|
||||
if it.has("text") {
|
||||
if type(it) == str {
|
||||
it
|
||||
} else if it == linebreak() {
|
||||
" "
|
||||
} else if it.has("text") {
|
||||
it.text
|
||||
} else if it.has("children") {
|
||||
it.children.map(heading_text).join("")
|
||||
} else if it == linebreak() {
|
||||
" "
|
||||
} else {
|
||||
""
|
||||
}
|
||||
}
|
||||
|
||||
// Must be called from inside a context block.
|
||||
#let cur_activity() = {
|
||||
let m = meta.get()
|
||||
let level1s = query(heading.where(level: 1, outlined: true))
|
||||
let n = counter(heading).get().at(0)
|
||||
let cur = level1s.at(n - 1)
|
||||
let prefix = str(m.cur_domain) + "." + str(n) + ". "
|
||||
|
||||
(
|
||||
prefix: prefix,
|
||||
name: heading_text(cur.body),
|
||||
location: cur.location(),
|
||||
)
|
||||
}
|
||||
|
||||
// ==================================================
|
||||
// Body components
|
||||
@@ -115,7 +133,8 @@
|
||||
block(
|
||||
width: 100%,
|
||||
inset: (x: 12pt, y: 18pt),
|
||||
radius: 4pt,
|
||||
spacing: 1.6em,
|
||||
// radius: 4pt,
|
||||
fill: bg_c,
|
||||
stroke: (paint: border_c),
|
||||
)[
|
||||
@@ -149,7 +168,7 @@
|
||||
stroke: (
|
||||
paint: c,
|
||||
thickness: line-width,
|
||||
cap: "round",
|
||||
// cap: "round",
|
||||
),
|
||||
angle: 90deg,
|
||||
length: body-size.height + 15pt,
|
||||
@@ -202,20 +221,43 @@
|
||||
)
|
||||
}
|
||||
|
||||
#let block_equation(content) = {
|
||||
#let block_equation(title: "", description: "", content) = context {
|
||||
let cp = color-palette.get()
|
||||
|
||||
callout()[
|
||||
#set par(
|
||||
spacing: 1em,
|
||||
)
|
||||
#if title != "" {
|
||||
kicker(color: cp.accent)[#title]
|
||||
}
|
||||
|
||||
#content
|
||||
|
||||
#if description != "" {
|
||||
set text(
|
||||
size: 9pt,
|
||||
fill: color-ink-helper,
|
||||
)
|
||||
align(right)[#description]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
#let stack(layers) = context {
|
||||
#let u_link(url, content) = link(url)[
|
||||
#underline(
|
||||
content,
|
||||
)
|
||||
]
|
||||
|
||||
#let stack(..layers) = context {
|
||||
let cp = color-palette.get()
|
||||
let radius = 12pt
|
||||
let gutter = 12pt
|
||||
let gap = 24pt
|
||||
let indent = radius + gutter
|
||||
|
||||
for (idx, (title, body)) in layers.enumerate() {
|
||||
for (idx, (title, body)) in layers.pos().enumerate() {
|
||||
let is_last = idx == layers.len() - 1
|
||||
|
||||
block(
|
||||
@@ -274,6 +316,38 @@
|
||||
}
|
||||
}
|
||||
|
||||
#let ref_evidence() = {
|
||||
let ca = cur_activity()
|
||||
|
||||
set ref(
|
||||
supplement: "증빙 자료.",
|
||||
)
|
||||
|
||||
align(bottom)[
|
||||
#hl[]
|
||||
*활동 증빙 자료:*
|
||||
#underline[#ref(label("Evidence) " + ca.name))]
|
||||
]
|
||||
}
|
||||
|
||||
#let add_evidence(activity_ref: none, ..content) = context {
|
||||
let name = str(activity_ref.target)
|
||||
let data = (
|
||||
(
|
||||
name,
|
||||
content.pos().flatten(),
|
||||
),
|
||||
).to-dict()
|
||||
|
||||
evidence-data.update(old => {
|
||||
if old == none {
|
||||
data
|
||||
} else {
|
||||
old + data
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
#let header_template(dark: false, font_color: none, show_activity: false) = place(
|
||||
top + left,
|
||||
dy: 1cm,
|
||||
@@ -293,13 +367,10 @@
|
||||
link((page: 1, x: 0pt, y: 0pt))[#m.cur_domain. #m.domain_name]
|
||||
h(1fr)
|
||||
if show_activity {
|
||||
let level1s = query(heading.where(level: 1, outlined: true))
|
||||
let n = counter(heading).get().at(0)
|
||||
let cur = level1s.at(n - 1)
|
||||
let prefix = str(m.cur_domain) + "." + str(n) + ". "
|
||||
let ca = cur_activity()
|
||||
link(
|
||||
cur.location(),
|
||||
prefix + cur.body,
|
||||
ca.location,
|
||||
ca.prefix + ca.name,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -345,7 +416,7 @@
|
||||
)
|
||||
|
||||
#text(font: font-caption)[
|
||||
#pad-zeros(m.cur_domain, 2) / #pad-zeros(m.total_domain, 2)
|
||||
#pad_zeros(m.cur_domain, 2) / #pad_zeros(m.total_domain, 2)
|
||||
]
|
||||
|
||||
#v(12pt)
|
||||
@@ -410,6 +481,7 @@
|
||||
#heading(level: 1)[
|
||||
#name
|
||||
]
|
||||
#label(heading_text(name))
|
||||
|
||||
#block_quote()[
|
||||
#hook
|
||||
@@ -451,7 +523,7 @@
|
||||
header: header_template(show_activity: true),
|
||||
footer: footer_template(),
|
||||
)[
|
||||
#kicker("결론")
|
||||
#kicker("결과")
|
||||
|
||||
#heading(level: 2)[
|
||||
#title
|
||||
@@ -460,6 +532,51 @@
|
||||
#content
|
||||
]
|
||||
|
||||
#let evidence() = context {
|
||||
let cp = color-palette.get()
|
||||
let ed = evidence-data.get()
|
||||
|
||||
page(
|
||||
header: header_template(),
|
||||
footer: footer_template(),
|
||||
)[
|
||||
#set heading(numbering: (..nums) => {
|
||||
numbering("A", nums.at(1))
|
||||
})
|
||||
#show heading.where(level: 2): it => {
|
||||
let num = counter(heading).display(
|
||||
(..nums) => numbering("A", nums.at(1)),
|
||||
)
|
||||
|
||||
block[
|
||||
#num. #it.body
|
||||
]
|
||||
}
|
||||
|
||||
#show table.cell.where(x: 0): set text(
|
||||
weight: 700,
|
||||
fill: cp.accent,
|
||||
)
|
||||
|
||||
#heading(level: 1, numbering: none)[
|
||||
증빙 자료
|
||||
]
|
||||
|
||||
#let cnt = ed.len()
|
||||
#for (name, data) in ed [
|
||||
#heading(level: 2, supplement: "evidence")[#name]
|
||||
#label("Evidence) " + name)
|
||||
|
||||
#table(
|
||||
columns: (10em, 1fr),
|
||||
..data,
|
||||
)
|
||||
|
||||
#{ cnt -= 1 }
|
||||
#if cnt > 0 { pagebreak() }
|
||||
]
|
||||
]
|
||||
}
|
||||
|
||||
// ==================================================
|
||||
// Style Settings
|
||||
@@ -515,11 +632,19 @@
|
||||
|
||||
set par(
|
||||
leading: 1.2em,
|
||||
spacing: 2.4em,
|
||||
spacing: 1.8em,
|
||||
)
|
||||
|
||||
show raw: set text(font: font-code)
|
||||
|
||||
show strong: set text(fill: cp.accent)
|
||||
|
||||
// underline config
|
||||
set underline(
|
||||
offset: 2pt,
|
||||
stroke: (paint: cp.accent, thickness: 1pt),
|
||||
)
|
||||
|
||||
// list config
|
||||
show list: set par(leading: 0.8em)
|
||||
set list(
|
||||
@@ -536,6 +661,31 @@
|
||||
spacing: 0.8em,
|
||||
)
|
||||
|
||||
// image config
|
||||
show image: set align(center)
|
||||
show image: set par(
|
||||
spacing: 1.6em,
|
||||
)
|
||||
|
||||
// figure config
|
||||
show figure: set text(
|
||||
fill: color-ink-helper,
|
||||
size: 10pt,
|
||||
)
|
||||
|
||||
show figure.caption: it => {
|
||||
"[ " + it.body + " ]"
|
||||
}
|
||||
|
||||
// table config
|
||||
show table: set text(size: 10pt)
|
||||
|
||||
set table(
|
||||
inset: 0.8em,
|
||||
align: left + top,
|
||||
stroke: (paint: cp.rule),
|
||||
)
|
||||
|
||||
// heading config
|
||||
show heading.where(level: 1): set heading(numbering: (..nums) => (
|
||||
str(cur_domain) + "." + nums.pos().map(str).join(".") + "."
|
||||
@@ -595,9 +745,11 @@
|
||||
fill: color-ink-secondary,
|
||||
)
|
||||
|
||||
block(above: 20pt)[
|
||||
#it
|
||||
]
|
||||
if it.element.supplement.text != "evidence" {
|
||||
block(above: 20pt)[
|
||||
#it
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
// render content
|
||||
|
||||
Reference in New Issue
Block a user