updated style

This commit is contained in:
Sven Vogel 2024-03-26 11:25:07 +01:00
parent 25692f0bde
commit ca168bdd79
17 changed files with 275 additions and 130 deletions

3
conf/bibliography.bib Normal file
View File

@ -0,0 +1,3 @@
% Bibliography based on BibTeX
% format: https://www.bibtex.com/g/bibtex-format/
% possible entry types: https://www.bibtex.com/e/entry-types/

8
conf/format.yaml Normal file
View File

@ -0,0 +1,8 @@
language: de
ligratures: true
hyphenate: true
paragraph-spacing: 1.5 # relative to line height
line-spacing: 0.75 # relative to line height
first-line-indent: 1 # in centimetres
font-size: 12 # in point

9
conf/glossary.yaml Normal file
View File

@ -0,0 +1,9 @@
glossary:
# Example:
# - short: PLC
# long: Programmable Logic Controller
# desc: Industrial computer for controlling automation devices

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

47
src/extra/util.typ Normal file
View File

@ -0,0 +1,47 @@
#let TitleSize = 24pt
#let SubtitleSize = 18pt
#let LargetextSize = 14pt
// titles are bold and twice the size of normal text
// also they are centered and not justified
#let title(x) = {
align(center, par(justify: false, text(weight: "regular", size: TitleSize)[#x]))
}
// subtitles are 1.5x the size of normal text
// also they are centered and not justified
#let subtitle(x) = {
par(justify: false, text(size: SubtitleSize)[#x])
}
#let largetext(x) = {
par(justify: false, text(size: LargetextSize)[#x])
}
#let signature = {
set align(bottom)
grid(
// set width of columns
// we need two, so make both half the page width
columns: (50%, 50%),
row-gutter: 0.75em,
align(left, {line(length: 6cm)}),
align(left, {line(length: 6cm)}),
align(left, "Ort, Datum"),
align(left, "Unterschrift")
)
}
#let to_em(x) = {
x * 1em
}
#let to_cm(x) = {
x * 1cm
}
#let to_pt(x) = {
x * 1pt
}

View File

@ -1,73 +1,190 @@
// style text #import "prelude.typ" as prelude
#set text(
ligatures: true,
size: 12pt // global font size
)
// page geometry // set page geometry:
// paper format of A4
#set page( #set page(
margin: (left: 3cm, right: 2cm, top: 2cm + 2em + 2em, bottom: 2cm), margin: (left: 3cm, right: 2cm, top: 2cm + 2em, bottom: 2cm),
paper: "a4", paper: "a4",
) )
#let info = yaml("info.yaml") // set global text parameter
#set text(
font: "Times New Roman",
size: prelude.to_pt(prelude.format.font-size),
ligatures: prelude.format.ligratures,
hyphenate: prelude.format.hyphenate,
alternates: prelude.format.ligratures,
discretionary-ligatures: prelude.format.ligratures,
lang: prelude.format.language
)
// set the text properties of verbatim/raw text blocks
#show raw: set text(
font: "FiraCode Nerd Font",
size: prelude.to_pt(prelude.format.font-size),
ligatures: prelude.format.ligratures,
hyphenate: prelude.format.hyphenate,
alternates: prelude.format.ligratures,
discretionary-ligatures: prelude.format.ligratures,
lang: prelude.format.language
)
// use block element as paragraph
// set block settings for every paragraph
#show par: set block(
below: prelude.to_em(prelude.format.paragraph-spacing), // paragraph spacing
)
// set global paragraph settings
#set par(
leading: prelude.to_em(prelude.format.line-spacing),
justify: true,
first-line-indent: prelude.to_cm(prelude.format.first-line-indent)
)
// set PDF meta information // set PDF meta information
#set document( #set document(
author: info.autor, author: prelude.info.autor,
date: datetime.today(), date: datetime.today(),
keywords: info.stichwörter keywords: prelude.info.stichwörter
) )
#set heading(numbering: none)
#set page(numbering: "I.", footer: "")
#show heading.where(
level: 1
): it => block(width: 100%)[
#set align(center)
#set text(prelude.to_pt(prelude.format.font-size) * 2, weight: "regular")
#it.body
#v(0.5cm)
]
#include "pages/titel.typ" #include "pages/titel.typ"
#include "pages/selbständigkeitserklärung.typ" #include "pages/selbständigkeitserklärung.typ"
#include "pages/sperrvermerk.typ" #include "pages/sperrvermerk.typ"
#include "pages/gender-hinweis.typ"
#include "pages/übersicht-arbeitspakete.typ"
#set page( #set page(
binding: left, binding: left,
header-ascent: 2em, header-ascent: 1em,
header: locate(loc => { header: locate(loc => {
smallcaps(prelude.info.titel)
v(-2em)
align(right, counter(page).display("I.")) align(right, counter(page).display("I."))
v(-0.75em) v(-1em)
line(length: 100%) line(length: 100%)
}), }),
footer: "" footer: ""
) )
// vorwort #show heading.where(
level: 1
): it => block(width: 100%)[
#set align(left)
#set text(prelude.to_pt(prelude.format.font-size) * 2, weight: "regular")
#v(0.25cm)
#it.body
#v(0.5cm)
]
#outline(title: "Inhaltsverzeichnis") #include "pages/gender-hinweis.typ"
#include "pages/übersicht-arbeitspakete.typ"
#outline(title: "Inhaltsverzeichnis", indent: auto)
#pagebreak() #pagebreak()
#outline( #outline(
title: [Abbildungsverzeichnis], title: "Abbildungsverzeichnis",
target: figure.where(kind: image), target: figure.where(kind: image),
) )
#pagebreak() #pagebreak()
#outline( #outline(
title: [Tabellensverzeichnis], title: "Tabellensverzeichnis",
target: figure.where(kind: table), target: figure.where(kind: table),
) )
#pagebreak() #pagebreak()
#outline( #outline(
title: [Quelltextverzeichnis], title: "Quelltextverzeichnis",
target: figure.where(kind: raw), target: figure.where(kind: raw),
) )
#pagebreak() #pagebreak()
// for creating glossary
#import "@preview/glossarium:0.2.6": make-glossary, print-glossary, gls, glspl
#show: make-glossary
= Glossar
// read all entries from config file
#let glossary = yaml("../conf/glossary.yaml")
// destination array
#let glossary_entries = ()
// parse TOML entries into correct format
#if glossary.glossary != none {
for entry in glossary.glossary {
let short = entry.at("short", default: none)
let long = entry.at("long", default: none)
let desc = entry.at("desc", default: none)
if short == none {
panic("Key of glossary term must be specified")
}
glossary_entries.push((key: short, short: short, long: long, desc: desc))
}
}
#print-glossary(glossary_entries)
#pagebreak()
// reset page counter
#counter(page).update(0)
= Abteilung
#show heading.where(
level: 1
): it => block(width: 100%)[
#set align(left)
#set text(prelude.to_pt(prelude.format.font-size) * 2, weight: "regular")
#v(0.25cm)
#it.numbering
#it.body
#v(0.5cm)
]
#set heading(numbering: "1.")
#set page( #set page(
binding: left,
header-ascent: 1em,
header: locate(loc => { header: locate(loc => {
align(right, counter(page).display("1.")) align(right, counter(page).display("1."))
v(-1em)
line(length: 100%) line(length: 100%)
}), }),
footer: "" footer: ""
) )
#set page(numbering: "1.")
= Kapitel
#lorem(100)
#pagebreak()
#set heading(numbering: none)
#bibliography(
style: "ieee",
"../conf/bibliography.bib"
)

View File

@ -1,21 +1,13 @@
// load general information from YAML #import "../prelude.typ" as prelude
#let info = yaml("../info.yaml")
#v(8em)
// title // title
#text(size: 2em, weight: "semibold", align(center, "Gender-Hinweis")) = Gender-Hinweis
#v(3em) #prelude.largetext()[
Zur besseren Lesbarkeit wird in dieser Arbeit das generische Maskulinum verwendet.
#set par(justify: true) Die in dieser Arbeit verwendeten
Personenbezeichnungen beziehen sich - sofern nicht anders kenntlich gemacht - auf alle Geschlechter.
#text(size: 1.25em)[
Zur besseren Lesbarkeit wird in dieser Hausarbeit das gene-
rische Maskulinum verwendet. Die in dieser Arbeit verwendeten
Personenbezeichnungen beziehen sich - sofern nicht anders kennt-
lich gemacht - auf alle Geschlechter.
] ]
#pagebreak() #pagebreak()

View File

@ -1,46 +1,29 @@
#import "../prelude.typ" as prelude
// load general information from YAML
#let info = yaml("../info.yaml")
#set align(center) #set align(center)
// title // title
#pad(top: 7em, text(size: 2em, weight: "semibold", "Selbständigkeitserklärung")) = Selbständigkeitserklärung
#pad(top: 7em, text(size: 1.25em)[ #v(1cm)
#prelude.largetext()[
Ich versichere hiermit, dass ich meine #linebreak() Prüfung mit dem Thema Ich versichere hiermit, dass ich meine #linebreak() Prüfung mit dem Thema
]) ]
#pad( #v(1cm)
top: 4em, #prelude.title(prelude.info.titel)
{
text(size: 1.5em, weight: "semibold", info.titel)
linebreak()
text(size: 1.5em, info.untertitel)
}
)
#pad(top: 6em, text(size: 1.5em)[ // subtitle
#prelude.subtitle(prelude.info.untertitel)
#v(1cm)
#prelude.largetext()[
selbständig verfasst und keine anderen als die angegebenen selbständig verfasst und keine anderen als die angegebenen
Quellen und Hilfsmittel benutzt habe. Ich versichere zudem, dass die Quellen und Hilfsmittel benutzt habe. Ich versichere zudem, dass die
eingereichte elektronische Fassung mit der gedruckten Fassung eingereichte elektronische Fassung mit der gedruckten Fassung
übereinstimmt. übereinstimmt.
]) ]
#set align(bottom) #prelude.signature
#pad(
top: 3em,
grid(
// set width of columns
// we need two, so make both half the page width
columns: (50%, 50%),
row-gutter: 0.75em,
align(left, {line(length: 16em)}),
align(left, {line(length: 16em)}),
align(left, "Ort, Datum"),
align(left, "Unterschrift")
)
)
#pagebreak() #pagebreak()

View File

@ -1,34 +1,17 @@
#import "../prelude.typ" as prelude
// load general information from YAML
#let info = yaml("../info.yaml")
#box(height: 7em)
// title // title
#text(size: 2em, weight: "semibold", align(center, "Sperrvermerk")) = Sperrvermerk
#box(height: 2em) #v(1cm)
#set par(justify: true) #prelude.largetext()[
#text(size: 1.25em)[
Der Inhalt dieser Arbeit darf weder als Ganzes noch in Der Inhalt dieser Arbeit darf weder als Ganzes noch in
Auszügen Personen außerhalb des Prüfungsprozesses Auszügen Personen außerhalb des Prüfungsprozesses
und des Evaluationsverfahrens zugänglich gemacht werden, und des Evaluationsverfahrens zugänglich gemacht werden,
sofern keine anders lautende Genehmigung der Ausbildungsstätte vorliegt. sofern keine anders lautende Genehmigung der Ausbildungsstätte vorliegt.
] ]
#box(height: 7em) #prelude.signature
#grid(
// set width of columns
// we need two, so make both half the page width
columns: (50%, 50%),
row-gutter: 0.75em,
align(left, {line(length: 16em)}),
align(left, {line(length: 16em)}),
align(left, "Ort, Datum"),
align(left, "Unterschrift")
)
#pagebreak() #pagebreak()

View File

@ -1,49 +1,46 @@
#import "../prelude.typ" as prelude
// load general information from YAML #let LogoHeight = 1.5cm
#let info = yaml("../info.yaml")
#set align(center) #set align(center)
// logo of ABB and DHBW // logo of ABB and DHBW
#pad( #grid(
top: 3em, // set width of columns
grid( // we need two, so make both half the page width
// set width of columns columns: (50%, 50%),
// we need two, so make both half the page width // left align logo of ABB
columns: (50%, 50%), align(left, image("../../res/svg/ABB.svg", height: LogoHeight)),
// left align logo of ABB // right align logo of DHBW
align(left, image("../../res/svg/ABB.svg", height: 35pt)), align(right, image("../../res/svg/DHBW.svg", height: LogoHeight))
// right align logo of DHBW
align(right, image("../../res/svg/DHBW.svg", height: 40pt))
)
) )
// title // title
#pad(top: 4em, text(size: 2em, weight: "semibold", info.titel)) #v(2cm)
#prelude.title(prelude.info.titel)
// subtitle // subtitle
#pad(top: 1em, text(size: 1.5em, info.untertitel)) #prelude.subtitle(prelude.info.untertitel)
// subtitle // type of paper
#pad(top: 4em, text(size: 1.5em, weight: "bold", info.typ)) #v(1cm)
#prelude.largetext(prelude.info.typ)
// number of semester // number of semester
#pad(top: 2em)[ Praxisphase des #prelude.info.semester Studienjahrs
Praxisphase des #info.semester Studienjahrs
]
// fakulty // fakulty
#pad(top: 0.5em)[ #pad(top: 0.5cm)[
an der Fakultät für #info.fakultät an der Fakultät für #prelude.info.fakultät
#linebreak() #linebreak()
im Studiengang #info.studiengang im Studiengang #prelude.info.studiengang
] ]
// university // university
#pad(top: 1.5em)[ #pad(top: 0.5cm)[
an der an der
#linebreak() #linebreak()
#info.universität #prelude.info.universität
] ]
#set align(bottom + left) #set align(bottom + left)
@ -54,32 +51,32 @@
stroke: none, stroke: none,
"Verfasser:", "Verfasser:",
info.autor, prelude.info.autor,
"Bearbeitungszeitraum:", "Bearbeitungszeitraum:",
info.bearbeitungszeitraum, prelude.info.bearbeitungszeitraum,
"Matrikelnummer, Kurs:", "Matrikelnummer, Kurs:",
str(info.matrikelnummer) + ", " + info.studiengang, str(prelude.info.matrikelnummer) + ", " + prelude.info.studiengang,
"Ausbildungsbetrieb:", "Ausbildungsbetrieb:",
info.betrieb, prelude.info.betrieb,
"Betr. Betreuer:", "Betrieblicher Betreuer:",
info.betreuer, prelude.info.betreuer,
"Abgabedatum:", "Abgabedatum:",
info.abgabe prelude.info.abgabe
) )
#pad( #pad(
top: 3em, top: 1cm,
grid( grid(
// set width of columns // set width of columns
// we need two, so make both half the page width // we need two, so make both half the page width
columns: (50%, 50%), columns: (50%, 50%),
align(left, "Unterschrift des betrieblichen Betreuers"), align(left, "Unterschrift des betrieblichen Betreuers"),
align(right, {line(length: 16em)}) align(right, {line(length: 6cm)})
) )
) )

View File

@ -1,22 +1,19 @@
#import "../prelude.typ" as prelude
#box(height: 7em)
// title // title
#text(size: 2em, weight: "semibold", align(center, "Übersicht Arbeitspakete")) = Übersicht Arbeitspakete
#box(height: 5em) Folgende Tabelle zeigt die Aktivtäten welche im Zeitraum vom #prelude.info.bearbeitungszeitraum abgehandelt wurden.
#let info = yaml("../info.yaml")
#figure( #figure(
kind: table, kind: table,
caption: "Übersicht Arbeitspakete", caption: "Übersicht Arbeitspakete",
table( table(
columns: 3, columns: (1fr, auto, auto),
align: right, align: center,
inset: 1em, inset: 0.25cm,
[*Thema*], [*Zeitraum*], [*Dauer (Wochen)*], [*Thema*], [*Zeitraum*], [*Dauer (Wochen)*],
..for packet in info.arbeits-pakete { ..for packet in prelude.info.arbeits-pakete {
let start_split = packet.start.split(".") let start_split = packet.start.split(".")
let start = datetime(day: int(start_split.at(0)), month: int(start_split.at(1)), year: int(start_split.at(2))) let start = datetime(day: int(start_split.at(0)), month: int(start_split.at(1)), year: int(start_split.at(2)))

9
src/prelude.typ Normal file
View File

@ -0,0 +1,9 @@
// import extras
#import "extra/util.typ": title, subtitle, largetext, signature, to_cm, to_pt, to_em
// import document information
#let info = yaml("../info.yaml")
// general document information
#let format = yaml("../conf/format.yaml")