typst-uniforlife-template/src/lib.typ

77 lines
2.2 KiB
Typst

#let accent = rgb(75, 50, 200)
#let yellow = rgb(255, 243, 0, 100)
#let darkyellow = rgb(255, 213, 00, 150)
#let report(
title: [Title],
task: [Task],
university: [Universität Graz],
institute: [Uni for Life],
course: [Course name],
instructor: [Instructor],
author: [Firstname Lastname],
date: [#datetime.today().display("[day]. [month repr:long] [year]")],
fontsize: 1.269em,
logo: "logo_uniforlife.svg",
lang: "de",
smallcaps_headings: true,
underline_headings: false,
body
) = {
let doublerule = [#set text(1pt, bottom-edge: "descender")
#line(length: 100%, stroke: darkyellow+2pt)#line(length: 100%, stroke: luma(150)+1pt)
]
show heading.where(level: 1): it => {
let heading_text = if smallcaps_headings {smallcaps(it)} else {it}
if underline_headings {
block(stroke: (bottom: darkyellow+0.2em), inset: (bottom: 0.05em))[#heading_text]
} else {
heading_text
}
}
show link: it => underline(stroke: yellow+0.2em, offset: 0.15em, evade: false, background: true)[#it]
let ulink(.. args) = {
[#underline(stroke: darkyellow+0.2em, offset: 0em, evade: false, background: true)[#link(.. args)]]
}
set page(
margin: (top: 8em, bottom: 5em),
header: context {
if counter(page).get().first() == 1 [
#set text(0.7em, top-edge: 1em)
#grid(inset: 0.1em, columns: (1fr, auto, 1fr), align: (left, center, right),
course,
[#emph(author)],
grid.cell(rowspan:3)[#image(logo, height: 3em)],
instructor, grid.cell(rowspan: 2)[#set text(1.3em); #align(bottom)[#task]],
date)
#doublerule
] else [
#set text(0.7em, top-edge: 1em)
#align(right)[#image(logo, height: 3em)]
#doublerule
]},
footer: context [
#doublerule
#v(0.5em)
#align(center)[#counter(page).display("1 / 1", both: true)]
],
)
let leading = 1.5em
let leading = leading - 0.75em // "Normalization"
set block(spacing: leading)
set par(spacing: leading, leading: leading, first-line-indent: 2em, justify: true)
set text(top-edge: 0.7em, fontsize, lang: lang)
v(-0.5cm)
align(center)[#text(1.1em)[#underline(stroke: darkyellow+0.3em, extent: 0.1em, offset: 0.05em, evade: false, background: true)[#smallcaps([#heading(numbering: none, outlined: false, level: 2)[*#title*]])]]]
v(0.5cm)
body
}