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