dhbw-abb-typst-template/src/style.typ

217 lines
5.6 KiB
Plaintext
Raw Normal View History

2024-06-27 13:57:04 +00:00
// .--------------------------------------------------------------------------.
// | Global style of document |
// '--------------------------------------------------------------------------'
// Author: Sven Vogel
// Edited: 27.06.2024
// License: MIT
2024-07-08 07:55:38 +00:00
#import "branding.typ": *
2024-07-08 19:57:23 +00:00
#let watermark-color = luma(50%).transparentize(70%)
#let watermark(config) = if config.draft {
rotate(-22.5deg)[
#rect(
2024-07-08 19:57:23 +00:00
radius: 1em,
inset: 1em,
stroke: watermark-color,
)[
#text(size: 4em, weight: "bold", fill: watermark-color, "DRAFT")
#linebreak()
#text(size: 1.25em, weight: "bold", fill: watermark-color)[
This page is part of a preliminary
#linebreak()
document version.
#linebreak()
2024-07-08 19:57:23 +00:00
#text(
size: 0.75em,
"Further usage without the authors consent is not permitted.",
)]]]
}
2024-06-27 13:57:04 +00:00
// global style of document
#let global_styled_doc(config, body) = {
let thesis = config.thesis
let style = config.style
2024-07-01 10:13:57 +00:00
set text(
size: style.text.size,
2024-06-28 09:54:30 +00:00
ligatures: true,
hyphenate: true,
dir: ltr,
2024-07-08 07:55:38 +00:00
font: style.text.font,
2024-07-08 19:57:23 +00:00
fill: ABB-BLACK,
)
2024-06-28 09:54:30 +00:00
show heading: set text(
font: style.heading.font,
2024-07-08 19:57:23 +00:00
weight: "semibold",
)
2024-06-28 09:54:30 +00:00
set heading(supplement: [chapter])
2024-07-01 12:46:32 +00:00
2024-07-08 07:58:46 +00:00
set math.equation(numbering: "(1)")
2024-06-28 09:54:30 +00:00
// Set header spacing
show heading.where(level: 1): it => v(2em) + it + v(1em)
show heading.where(level: 2): it => v(1em) + it + v(0.5em)
show heading.where(level: 3): it => v(0.5em) + it + v(0.25em)
2024-06-28 09:54:30 +00:00
// set theme for code blocks
set raw(
tab-size: style.code.tab-size,
2024-07-08 19:57:23 +00:00
theme: style.code.theme,
)
show raw: set text(font: style.code.font)
2024-06-27 13:57:04 +00:00
show figure: set block(breakable: true)
2024-07-08 07:34:33 +00:00
// APA style table
set table(
inset: 0.5em,
align: left,
stroke: (x, y) => (
left: none,
right: none,
2024-07-08 19:57:23 +00:00
top: if y == 0 {
1.5pt
} else if y < 2 {
1pt
} else {
0pt
},
bottom: if y == 0 {
1pt
} else {
1.5pt
},
),
)
2024-07-08 07:34:33 +00:00
// make table header bold
show table.cell.where(y: 0): set text(weight: "bold")
set block(spacing: 2em)
set par(
2024-06-28 13:20:58 +00:00
justify: true,
first-line-indent: 1em,
2024-07-08 19:57:23 +00:00
leading: 1em,
)
2024-06-28 13:20:58 +00:00
// give links a color
show link: set text(fill: style.link.color)
show ref: set text(fill: style.link.color)
2024-06-28 09:54:30 +00:00
set heading(numbering: none)
set page(
paper: style.page.format,
foreground: watermark(config),
header-ascent: style.header.content-padding,
footer-descent: style.header.content-padding,
margin: (
top: style.page.margin.top + style.header.logo-height + style.header.underline-top-padding + style.header.content-padding,
bottom: style.page.margin.bottom + style.footer.content-padding,
left: style.page.margin.left,
2024-07-08 19:57:23 +00:00
right: style.page.margin.right,
),
2024-07-01 10:13:57 +00:00
numbering: (..nums) => {
let current-page = here().page()
2024-07-08 19:57:23 +00:00
if current-page == 1 {
2024-07-01 10:13:57 +00:00
[]
2024-07-01 11:50:54 +00:00
} else if query(<end-of-prelude>).first().location().page() > current-page {
numbering("I", nums.pos().first())
} else if query(<end-of-content>).first().location().page() >= current-page {
numbering("1", nums.pos().first())
2024-07-01 10:13:57 +00:00
} else {
2024-07-01 11:50:54 +00:00
numbering("a", nums.pos().first())
2024-07-01 10:13:57 +00:00
}
},
footer: context [
#set align(center)
#let page-counter = counter(page).get().first()
#let page-number = here().page()
#if page-number == 1 {
[]
} else if query(<end-of-prelude>).first().location().page() > page-number {
numbering("I", page-counter)
} else if query(<end-of-content>).first().location().page() >= page-number {
2024-07-08 19:57:23 +00:00
numbering(
"1 / 1",
page-counter,
counter(page).at(<end-of-content>).last(),
)
} else {
numbering("a", page-counter)
}
],
2024-07-01 10:13:57 +00:00
header: context {
set align(left)
if here().page() == 1 {
// logo of ABB and DHBW
grid(
// set width of columns
// we need two, so make both half the page width
columns: (50%, 50%),
// left align logo of ABB
align(left, image("res/ABB.svg", height: style.header.logo-height)),
2024-07-01 10:13:57 +00:00
// right align logo of DHBW
align(right, image("res/DHBW.svg", height: style.header.logo-height)))
2024-07-01 10:13:57 +00:00
} else if query(<end-of-prelude>).first().location().page() <= here().page() {
2024-07-08 19:57:23 +00:00
let headers-before = query(
selector(heading.where(numbering: "1.", level: 1)).before(here()),
)
2024-07-01 10:13:57 +00:00
let header-title = thesis.title
if headers-before.len() > 0 {
header-title = headers-before.last().body
} else {
2024-07-08 19:57:23 +00:00
let headers-after = query(
selector(heading.where(numbering: "1.", level: 1)).after(here()),
)
2024-07-01 10:13:57 +00:00
if headers-after.len() > 0 {
header-title = headers-after.first().body
}
}
grid(
columns: (1fr, auto),
align: (horizon, bottom),
context [ _ #header-title _ ],
2024-07-08 19:57:23 +00:00
image("res/DHBW.svg", height: style.header.logo-height),
)
v(style.header.underline-top-padding - 1em)
2024-07-01 10:13:57 +00:00
line(length: 100%)
} else {
grid(
columns: (1fr, auto),
align: (horizon, bottom),
context [ _ #config.thesis.title _ ],
2024-07-08 19:57:23 +00:00
image("res/DHBW.svg", height: style.header.logo-height),
2024-07-01 10:13:57 +00:00
)
v(style.header.underline-top-padding - 1em)
2024-07-01 10:13:57 +00:00
line(length: 100%)
}
2024-07-08 19:57:23 +00:00
},
)
2024-07-01 10:13:57 +00:00
body
}
2024-07-01 10:13:57 +00:00
#let content_styled(config, body) = {
set heading(numbering: "1.")
2024-07-01 11:50:54 +00:00
body
}
2024-07-01 11:50:54 +00:00
#let end_styled(config, body) = {
set heading(numbering: "1.")
2024-07-01 11:50:54 +00:00
body
}