Compare commits

...

3 Commits

Author SHA1 Message Date
Sven Vogel ba72a81c78 style: run typstyle
release / release (push) Failing after 1m57s Details
Gitea Action for checking typst compilation / run-ci-linux (push) Failing after 1m53s Details
2024-11-19 11:55:23 +01:00
Sven Vogel a796f5ecfb feat: allow empty company logo 2024-11-19 11:53:59 +01:00
Sven Vogel 9b90660353 feat: add support for multiple authors 2024-11-19 11:14:04 +01:00
6 changed files with 107 additions and 52 deletions

View File

@ -18,16 +18,28 @@
// Adds preleminarry note page and watermark // Adds preleminarry note page and watermark
draft: true, draft: true,
// information about author(s) // information about author(s)
author: ( university: (
name: "Sven Vogel",
semester: 4,
program: "Informationtechnology", program: "Informationtechnology",
course: "TINF19IT1",
faculty: "Technik", faculty: "Technik",
university: "DHBW Mannheim", name: "dualen Hochschule Baden-Württemberg",
company: "ABB AG", campus: "Eppelheim"
supervisor: "Benny Goodman", ),
matriculation-number: 123456789), authors: (
(
name: "Sven Vogel",
course: "TINF19IT1",
company: "ABB AG",
supervisor: "Benny Goodman",
matriculation-number: 123456789
),
(
name: "Kurt Jammer",
course: "TINF24AI2",
company: "Siemens",
supervisor: "Henry Badman",
matriculation-number: 478568763
),
),
// information about thesis // information about thesis
thesis: ( thesis: (
title: "Unofficial ABB/DHBW Typst template", title: "Unofficial ABB/DHBW Typst template",
@ -47,7 +59,7 @@
header: ( header: (
content-padding: 1.5em, content-padding: 1.5em,
underline-top-padding: 0pt, underline-top-padding: 0pt,
logo-height: 3em, logo-height: 5em,
logo-image: "res/ABB.svg"), logo-image: "res/ABB.svg"),
footer: ( footer: (
content-padding: 1.5em), content-padding: 1.5em),
@ -87,7 +99,9 @@
if key in update { if key in update {
let update_val = update.at(key) let update_val = update.at(key)
if type(val) == dictionary and type(update_val) == dictionary { if type(val) == array {
// ignore checking arraay
} else if type(val) == dictionary and type(update_val) == dictionary {
base.insert(key, deep-insert-checked(val, update_val)) base.insert(key, deep-insert-checked(val, update_val))
} else if val == none or type(val) == type(update_val) { } else if val == none or type(val) == type(update_val) {
base.insert(key, update_val) base.insert(key, update_val)

View File

@ -71,7 +71,7 @@
// set document properties // set document properties
#set document( #set document(
author: config.author.name, // author: config.author.name,
keywords: config.thesis.keywords, keywords: config.thesis.keywords,
title: config.thesis.title, title: config.thesis.title,
) )

View File

@ -12,7 +12,6 @@
pagebreak(weak: true) pagebreak(weak: true)
let thesis = config.thesis let thesis = config.thesis
let author = config.author
if text.lang == "de" [ if text.lang == "de" [
#heading(level: 1, "Sperrvermerk") #heading(level: 1, "Sperrvermerk")

View File

@ -12,7 +12,6 @@
pagebreak(weak: true) pagebreak(weak: true)
let thesis = config.thesis let thesis = config.thesis
let author = config.author
if text.lang == "de" [ if text.lang == "de" [
#heading("Selbständigkeitserklärung") #heading("Selbständigkeitserklärung")

View File

@ -10,7 +10,25 @@
context [ context [
#let thesis = config.thesis #let thesis = config.thesis
#let author = config.author
// logo of ABB and DHBW
#v(-config.style.header.content-padding)
#grid(
// set width of columns
// we need two, so make both half the page width
columns: (50%, 50%),
// left align logo of ABB
if config.style.header.logo-image == none {
// error
} else if config.style.header.logo-image.len() > 0 {
align(left, image(config.style.header.logo-image, height: config.style.header.logo-height))
} else {
align(left, image("../res/DHBW.svg", height: config.style.header.logo-height))
},
// right align logo of DHBW
if config.style.header.logo-image.len() > 0 {
align(right, image("../res/DHBW.svg", height: config.style.header.logo-height))
})
#set align(center) #set align(center)
@ -31,13 +49,9 @@
// faculty // faculty
#pad()[ #pad()[
#if text.lang == "de" [ #if text.lang == "de" [
Praxisphase des #author.semester Semesters an der Fakultät für #author.faculty aus dem Studiengang #config.university.program | #config.university.faculty
#linebreak()
im Studiengang #author.program
] else if text.lang == "en" [ ] else if text.lang == "en" [
Practical phase of the #author.semester semester at the Faculty of #author.faculty from the course of studies #config.university.program | #config.university.faculty
#linebreak()
in the degree program #author.program
] else [ ] else [
#context panic("no translation for language: ", text.lang) #context panic("no translation for language: ", text.lang)
] ]
@ -52,41 +66,82 @@
] else [ ] else [
#context panic("no translation for language: ", text.lang) #context panic("no translation for language: ", text.lang)
] ]
#config.university.name
#linebreak() #linebreak()
#author.university #config.university.campus
]
#pad(top: 1em)[
#let names = ()
#for author in config.authors {
names.push(author.name)
}
#if text.lang == "de" [
von
] else if text.lang == "en" [
by
] else [
#context panic("no translation for language: ", text.lang)
]
#set text(size: 16pt)
#grid(columns: 1, row-gutter: 1em, ..names)
]
#pad(top: 1em)[
#thesis.timeframe
] ]
#set align(bottom + left) #set align(bottom + left)
#if text.lang == "de" [ #if text.lang == "de" [
#table( #grid(
columns: 2, columns: 2,
column-gutter: 1cm, column-gutter: 1cm,
align: left, row-gutter: 0.5cm,
align: top + left,
stroke: none, stroke: none,
[*Verfasser:*], author.name, [Matrikelnummer, Kurs:],
[*Bearbeitungszeitraum:*], thesis.timeframe, par(
[*Matrikelnummer, Kurs:*], leading: 0.5em,
str(author.matriculation-number) + ", " + author.course, for author in config.authors {
str(author.matriculation-number) + ", " + author.course
linebreak()
},
),
[*Ausbildungsbetrieb:*], author.company, [Betrieb, Betreuer:],
[*Betrieblicher Betreuer:*], author.supervisor, par(
[*Abgabedatum:*], thesis.submission-date, leading: 0.5em,
for author in config.authors {
author.company + ", " + author.supervisor
linebreak()
},
),
) )
] else if text.lang == "en" [ ] else if text.lang == "en" [
#table( #grid(
columns: 2, columns: 2,
column-gutter: 1cm, column-gutter: 1cm,
align: left, row-gutter: 0.5cm,
align: top + left,
stroke: none, stroke: none,
[*Author:*], author.name, [Student ID, Course:],
[*Editing period:*], thesis.timeframe, par(
[*Matriculation number, course:*], leading: 0.5em,
str(author.matriculation-number) + ", " + author.course, for author in config.authors {
str(author.matriculation-number) + ", " + author.course
linebreak()
},
),
[*Training company:*], author.company, [Company, Supervisor:],
[*Company supervisor:*], author.supervisor, par(
[*Submission date:*], thesis.submission-date, leading: 0.5em,
for author in config.authors {
author.company + ", " + author.supervisor
linebreak()
},
),
) )
] else [ ] else [
#context panic("no translation for language: ", text.lang) #context panic("no translation for language: ", text.lang)

View File

@ -294,19 +294,7 @@
let current-page = here().page() let current-page = here().page()
if current-page == 1 { if current-page == 1 {
// logo of ABB and DHBW // logo moved to content
grid(
// set width of columns
// we need two, so make both half the page width
columns: (50%, 50%),
// left align logo of ABB
if style.header.logo-image == none {
[]
} else if style.header.logo-image.len() > 0 {
align(left, image(style.header.logo-image, height: style.header.logo-height))
},
// right align logo of DHBW
align(right, image("res/DHBW.svg", height: style.header.logo-height)))
} else if query(<end-of-content>) } else if query(<end-of-content>)
.first() .first()