refine stack
This commit is contained in:
+61
-70
@@ -19,6 +19,10 @@
|
|||||||
|
|
||||||
#let bleed = 1.5cm
|
#let bleed = 1.5cm
|
||||||
|
|
||||||
|
#let page-paper = "a4"
|
||||||
|
#let page-height = 297mm
|
||||||
|
#let page-margin = (x: 2.8cm, y: 4.2cm)
|
||||||
|
|
||||||
// ==================================================
|
// ==================================================
|
||||||
// Metadata
|
// Metadata
|
||||||
// ==================================================
|
// ==================================================
|
||||||
@@ -68,6 +72,10 @@
|
|||||||
accent-faint: color.oklch(70%, 0.02, hue),
|
accent-faint: color.oklch(70%, 0.02, hue),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#let fill_break() = context {
|
||||||
|
v(1fr)
|
||||||
|
}
|
||||||
|
|
||||||
#let heading_text(it) = {
|
#let heading_text(it) = {
|
||||||
if it.has("text") {
|
if it.has("text") {
|
||||||
it.text
|
it.text
|
||||||
@@ -85,24 +93,35 @@
|
|||||||
// Body components
|
// Body components
|
||||||
// ==================================================
|
// ==================================================
|
||||||
|
|
||||||
#let callout(bg_color: none, border_color: none, body) = context {
|
#let kicker(color: color-ink-helper, content) = {
|
||||||
|
set text(
|
||||||
|
font: font-body,
|
||||||
|
weight: 700,
|
||||||
|
size: 10pt,
|
||||||
|
tracking: 1pt,
|
||||||
|
fill: color,
|
||||||
|
)
|
||||||
|
|
||||||
|
block(below: 1.5em)[
|
||||||
|
#content
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
#let callout(title: "", bg_color: none, border_color: none, body) = context {
|
||||||
let cp = color-palette.get()
|
let cp = color-palette.get()
|
||||||
let bg_c = if bg_color == none { cp.callout-surface } else { bg_color }
|
let bg_c = if bg_color == none { cp.callout-surface } else { bg_color }
|
||||||
let border_c = if border_color == none { cp.callout-border } else { border_color }
|
let border_c = if border_color == none { cp.callout-border } else { border_color }
|
||||||
|
|
||||||
let x_pad = 12pt
|
|
||||||
let y_pad = 18pt
|
|
||||||
let gap = 24pt
|
|
||||||
|
|
||||||
block(
|
block(
|
||||||
width: 100%,
|
width: 100%,
|
||||||
above: gap + y_pad,
|
inset: (x: 12pt, y: 18pt),
|
||||||
below: gap + y_pad,
|
|
||||||
outset: (x: x_pad, y: y_pad),
|
|
||||||
radius: 4pt,
|
radius: 4pt,
|
||||||
fill: bg_c,
|
fill: bg_c,
|
||||||
stroke: (paint: border_c),
|
stroke: (paint: border_c),
|
||||||
)[
|
)[
|
||||||
|
#if title != "" {
|
||||||
|
kicker(color: cp.accent)[#title]
|
||||||
|
}
|
||||||
#body
|
#body
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -118,6 +137,7 @@
|
|||||||
let body-size = measure(
|
let body-size = measure(
|
||||||
content,
|
content,
|
||||||
width: body-width,
|
width: body-width,
|
||||||
|
height: size.height,
|
||||||
)
|
)
|
||||||
|
|
||||||
grid(
|
grid(
|
||||||
@@ -140,20 +160,6 @@
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#let kicker(color: color-ink-helper, content) = {
|
|
||||||
set text(
|
|
||||||
font: font-body,
|
|
||||||
weight: 700,
|
|
||||||
size: 10pt,
|
|
||||||
tracking: 1pt,
|
|
||||||
fill: color,
|
|
||||||
)
|
|
||||||
|
|
||||||
block(below: 1.5em)[
|
|
||||||
#content
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
#let problem(content) = context {
|
#let problem(content) = context {
|
||||||
let c = color-palette.get().problem
|
let c = color-palette.get().problem
|
||||||
|
|
||||||
@@ -177,7 +183,9 @@
|
|||||||
#let hl(content) = context {
|
#let hl(content) = context {
|
||||||
let cp = color-palette.get()
|
let cp = color-palette.get()
|
||||||
|
|
||||||
// if content == "" {}
|
let body = box(
|
||||||
|
inset: (x: if content == [] { 0pt } else { 10pt }),
|
||||||
|
)[#content]
|
||||||
|
|
||||||
set text(
|
set text(
|
||||||
font: font-body,
|
font: font-body,
|
||||||
@@ -190,8 +198,7 @@
|
|||||||
grid(
|
grid(
|
||||||
columns: (1fr, auto, 1fr),
|
columns: (1fr, auto, 1fr),
|
||||||
align: horizon,
|
align: horizon,
|
||||||
gutter: 10pt,
|
line(length: 100%, stroke: (paint: cp.rule)), body, line(length: 100%, stroke: (paint: cp.rule)),
|
||||||
line(length: 100%, stroke: (paint: cp.rule)), content, line(length: 100%, stroke: (paint: cp.rule)),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,54 +213,36 @@
|
|||||||
let radius = 12pt
|
let radius = 12pt
|
||||||
let gutter = 12pt
|
let gutter = 12pt
|
||||||
let gap = 24pt
|
let gap = 24pt
|
||||||
|
let indent = radius + gutter
|
||||||
|
|
||||||
for (idx, (title, body)) in layers.enumerate() {
|
for (idx, (title, body)) in layers.enumerate() {
|
||||||
let is_last = idx == layers.len() - 1
|
let is_last = idx == layers.len() - 1
|
||||||
|
|
||||||
let content = {
|
|
||||||
v(radius - 12pt / 2)
|
|
||||||
text(
|
|
||||||
weight: 700,
|
|
||||||
)[
|
|
||||||
#title
|
|
||||||
#linebreak()
|
|
||||||
]
|
|
||||||
body
|
|
||||||
v(gap)
|
|
||||||
}
|
|
||||||
|
|
||||||
block(
|
block(
|
||||||
above: if idx == 0 { auto } else { 0pt },
|
above: if idx == 0 { auto } else { 0pt },
|
||||||
below: if is_last { auto } else { 0pt },
|
below: if is_last { auto } else { 0pt },
|
||||||
|
inset: (left: indent),
|
||||||
|
stroke: (left: (paint: cp.accent, thickness: 1pt)),
|
||||||
width: 100%,
|
width: 100%,
|
||||||
)[
|
)[
|
||||||
#layout(size => {
|
#place(
|
||||||
let content_width = size.width - radius * 2 - gutter
|
left + top,
|
||||||
let content_size = measure(content, width: content_width)
|
dx: -indent - radius,
|
||||||
|
)[
|
||||||
|
#circle(radius: radius, fill: cp.accent)[
|
||||||
|
#set align(center + horizon)
|
||||||
|
#set text(font: font-serif, fill: color-ink-inverse, size: 12pt, weight: 700)
|
||||||
|
#{ idx + 1 }
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
grid(
|
#v(radius - 12pt / 2)
|
||||||
columns: (radius * 2, 1fr),
|
#text(weight: 700)[
|
||||||
gutter: gutter,
|
#title
|
||||||
grid(
|
#linebreak()
|
||||||
rows: (radius * 2, auto),
|
]
|
||||||
circle(radius: radius, fill: cp.accent)[
|
#body
|
||||||
#set align(center + horizon)
|
#v(gap)
|
||||||
#set text(font: font-serif, fill: color-ink-inverse, size: 12pt, weight: 700)
|
|
||||||
#{ idx + 1 }
|
|
||||||
],
|
|
||||||
line(
|
|
||||||
start: (50%, 0pt),
|
|
||||||
end: (50%, content_size.height - radius * 2),
|
|
||||||
stroke: (
|
|
||||||
paint: cp.accent,
|
|
||||||
thickness: 1pt,
|
|
||||||
cap: "round",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
content,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -434,7 +423,7 @@
|
|||||||
header: header_template(show_activity: true),
|
header: header_template(show_activity: true),
|
||||||
footer: footer_template(),
|
footer: footer_template(),
|
||||||
)[
|
)[
|
||||||
#kicker("프로젝트 설명")
|
#kicker("프로젝트 소개")
|
||||||
|
|
||||||
#heading(level: 2)[
|
#heading(level: 2)[
|
||||||
#title
|
#title
|
||||||
@@ -446,6 +435,7 @@
|
|||||||
// Activity process
|
// Activity process
|
||||||
#let activity_process(title: "", content) = page(
|
#let activity_process(title: "", content) = page(
|
||||||
header: header_template(show_activity: true),
|
header: header_template(show_activity: true),
|
||||||
|
footer: footer_template(),
|
||||||
)[
|
)[
|
||||||
#kicker("시행착오")
|
#kicker("시행착오")
|
||||||
|
|
||||||
@@ -459,6 +449,7 @@
|
|||||||
// Activity result
|
// Activity result
|
||||||
#let activity_result(title: "", content) = page(
|
#let activity_result(title: "", content) = page(
|
||||||
header: header_template(show_activity: true),
|
header: header_template(show_activity: true),
|
||||||
|
footer: footer_template(),
|
||||||
)[
|
)[
|
||||||
#kicker("결론")
|
#kicker("결론")
|
||||||
|
|
||||||
@@ -509,8 +500,8 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
set page(
|
set page(
|
||||||
paper: "a4",
|
paper: page-paper,
|
||||||
margin: (x: 2.8cm, y: 4.2cm),
|
margin: page-margin,
|
||||||
fill: color-surface,
|
fill: color-surface,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -535,14 +526,14 @@
|
|||||||
marker: ([--], [•]),
|
marker: ([--], [•]),
|
||||||
indent: 0.6em,
|
indent: 0.6em,
|
||||||
body-indent: 0.8em,
|
body-indent: 0.8em,
|
||||||
spacing: 1.2em,
|
spacing: 0.8em,
|
||||||
)
|
)
|
||||||
|
|
||||||
show enum: set par(leading: 0.8em)
|
show enum: set par(leading: 0.8em)
|
||||||
set enum(
|
set enum(
|
||||||
indent: 0.6em,
|
indent: 0.6em,
|
||||||
body-indent: 0.8em,
|
body-indent: 0.8em,
|
||||||
spacing: 1.2em,
|
spacing: 0.8em,
|
||||||
)
|
)
|
||||||
|
|
||||||
// heading config
|
// heading config
|
||||||
@@ -569,7 +560,7 @@
|
|||||||
|
|
||||||
// outline config
|
// outline config
|
||||||
set outline(
|
set outline(
|
||||||
indent: 1em,
|
indent: 2em,
|
||||||
)
|
)
|
||||||
|
|
||||||
show outline: set par(leading: 1em)
|
show outline: set par(leading: 1em)
|
||||||
@@ -600,7 +591,7 @@
|
|||||||
set text(
|
set text(
|
||||||
font: font-body,
|
font: font-body,
|
||||||
size: 12pt,
|
size: 12pt,
|
||||||
weight: 700,
|
weight: 400,
|
||||||
fill: color-ink-secondary,
|
fill: color-ink-secondary,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user