diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml new file mode 100644 index 0000000..5229f73 --- /dev/null +++ b/.gitea/workflows/ci.yml @@ -0,0 +1,16 @@ +name: Gitea Action for checking typst compilation +run-name: Performing Typst compilation +on: [push] + +jobs: + run-ci-linux: + runs-on: ubuntu-latest + env: + TYPST_INSTALL: /usr/local + steps: + - name: Check out repository code + uses: actions/checkout@v3 + - name: Install Typst CLI + run: curl -fsSL https://typst.community/typst-install/install.sh | sh + - name: Run CI + run: bash -c ./run-ci.sh diff --git a/LICENSE b/LICENSE index 47e64a8..2d50040 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 DHBW +Copyright (c) 2024 Sven Vogel Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/README.md b/README.md index a47191a..0466da7 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,9 @@ # Praxisbericht-Template-Typst -Tempalte für Praxisberichte, T100, T200, T3000 und Bechelor Arbeiten. Im Gegensatz zu https://git.montehaselino.de/DHBW/Praxisbericht-Template wird Typst und nicht LaTeX als typsetting sprache verwendet. +The template makes use of ABB and DHBW branding. -## Geplante Features: -- Inhaltsverzeichnis -- Quelltextverzeichnis -- Abbildungsverzechnis -- Tabellenverzeichnis -- Literaturverzeichnis -- Glossar -- Abkürzungsverzeichnis -- Ligratures in code blöcken -- Diagramme -- Literatur -- Fußnoten -- Anhang \ No newline at end of file +## Format +All pages have a margin of 2.5cm between header/footer/content and the page border. +Header and footer do not overlap into this margin. + +Bibliography is formated with the IEEE style. Appendecies make use of the APA style. \ No newline at end of file diff --git a/assets/thumbnail.png b/assets/thumbnail.png new file mode 100644 index 0000000..c1a4d53 Binary files /dev/null and b/assets/thumbnail.png differ diff --git a/conf/bibliography.bib b/conf/bibliography.bib deleted file mode 100644 index 5553e2b..0000000 --- a/conf/bibliography.bib +++ /dev/null @@ -1,3 +0,0 @@ -% Bibliography based on BibTeX -% format: https://www.bibtex.com/g/bibtex-format/ -% possible entry types: https://www.bibtex.com/e/entry-types/ diff --git a/conf/format.yaml b/conf/format.yaml deleted file mode 100644 index 790896d..0000000 --- a/conf/format.yaml +++ /dev/null @@ -1,9 +0,0 @@ - -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 -font-familty: "TeX Gyre Termes" diff --git a/conf/glossary.yaml b/conf/glossary.yaml deleted file mode 100644 index b188fde..0000000 --- a/conf/glossary.yaml +++ /dev/null @@ -1,9 +0,0 @@ - -glossary: - -# Example: - -# - short: PLC -# long: Programmable Logic Controller -# desc: Industrial computer for controlling automation devices - diff --git a/conf/info.yaml b/conf/info.yaml deleted file mode 100644 index 5da1db0..0000000 --- a/conf/info.yaml +++ /dev/null @@ -1,30 +0,0 @@ - -autor: Sven Vogel -titel: Konfiguration & Integration von PROFINET -untertitel: für die AC500 SPS -typ: T2000 -semester: 3 -fakultät: Technik -studiengang: Informationstechnik -universität: DHBW Mannheim -matrikelnummer: 1191225 -betrieb: ABB AG -betreuer: Florian Miedniak -abgabe: 20. März 2024 -bearbeitungszeitraum: 1. Januar 2024 - 20. März 2024 -stichwörter: - - informatik - - profinet - -# Berechent automatisch die Wochen Anzahl -# Start- und Endzeit müssen im Format dd-mm-yyyy sein. -arbeits-pakete: - - thema: Konfiguration des Stacks - start: 08.01.2024 - ende: 31.01.2024 - - thema: Integration in die Laufzeit - start: 01.02.2024 - ende: 01.03.2024 - - thema: Testen und Evaluation - start: 04.03.2024 - ende: 20.03.2024 \ No newline at end of file diff --git a/res/font/FiraCode/FiraCode Nerd Font Regular.ttf b/res/font/FiraCode/FiraCode Nerd Font Regular.ttf deleted file mode 100644 index 7abb9fc..0000000 Binary files a/res/font/FiraCode/FiraCode Nerd Font Regular.ttf and /dev/null differ diff --git a/res/font/tex-gyre-termes/texgyretermes-bold.otf b/res/font/tex-gyre-termes/texgyretermes-bold.otf deleted file mode 100644 index c181d55..0000000 Binary files a/res/font/tex-gyre-termes/texgyretermes-bold.otf and /dev/null differ diff --git a/res/font/tex-gyre-termes/texgyretermes-bolditalic.otf b/res/font/tex-gyre-termes/texgyretermes-bolditalic.otf deleted file mode 100644 index 028b170..0000000 Binary files a/res/font/tex-gyre-termes/texgyretermes-bolditalic.otf and /dev/null differ diff --git a/res/font/tex-gyre-termes/texgyretermes-italic.otf b/res/font/tex-gyre-termes/texgyretermes-italic.otf deleted file mode 100644 index 935f9db..0000000 Binary files a/res/font/tex-gyre-termes/texgyretermes-italic.otf and /dev/null differ diff --git a/res/font/tex-gyre-termes/texgyretermes-regular.otf b/res/font/tex-gyre-termes/texgyretermes-regular.otf deleted file mode 100644 index 20f26fb..0000000 Binary files a/res/font/tex-gyre-termes/texgyretermes-regular.otf and /dev/null differ diff --git a/run-ci.sh b/run-ci.sh new file mode 100755 index 0000000..8980161 --- /dev/null +++ b/run-ci.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -e + +function abort() { + echo "test case `$1` has failed" 1>&2 + exit 1 +} + +echo "Running tests..." + +echo "Running test local-import..." +typst compile tests/local-import/main.typ --root . || abort "local-import" + +echo "Tests completed successfully" diff --git a/src/conf.typ b/src/conf.typ new file mode 100644 index 0000000..728de8c --- /dev/null +++ b/src/conf.typ @@ -0,0 +1,8 @@ + +// .--------------------------------------------------------------------------. +// | Configuration | +// '--------------------------------------------------------------------------' + +// Author: Sven Vogel +// Edited: 27.06.2024 +// License: MIT diff --git a/src/content/audition.typ b/src/content/audition.typ deleted file mode 100644 index 7d0f1ba..0000000 --- a/src/content/audition.typ +++ /dev/null @@ -1,46 +0,0 @@ - -// ==================================================== -// -// AUDITION OF WORK -// -// Author: Sven Vogel -// License: MIT -// Edited: 29.03.2024 -// -// This file binds and styles pages about: -// - title -// - declaration of indipendence -// - confidential clause -// - gender note -// - working packages -// - abstract -// ==================================================== - -#import "../prelude.typ" as prelude - -#set heading(numbering: none, supplement: [Heading]) -#set page(numbering: "I.", footer: "") - -#include "../pages/title.typ" -#include "../pages/declaration-of-indipendence.typ" -#include "../pages/confidential-clause.typ" - -#set page( - binding: left, - header-ascent: 2em, - header: locate(loc => { - table(columns: (1fr, auto), - align: (left, right), - stroke: none, - inset: (top: 0pt, bottom: 0.5em, left: 0pt, right: 0pt), - text(size: prelude.to_pt(prelude.format.font-size), prelude.info.titel), - text(size: prelude.to_pt(prelude.format.font-size), counter(page).display("I.")), - table.hline() - ) - }), - footer: "" -) - -#include "../pages/gender-note.typ" -#include "../pages/working-packages.typ" -#include "../pages/abstract.typ" \ No newline at end of file diff --git a/src/content/bibliography.typ b/src/content/bibliography.typ deleted file mode 100644 index 03f99e1..0000000 --- a/src/content/bibliography.typ +++ /dev/null @@ -1,39 +0,0 @@ - -// ==================================================== -// -// BIBLIOGRAPHY -// -// Author: Sven Vogel -// License: MIT -// Edited: 29.03.2024 -// -// This file binds and styles bibliography of this work -// ==================================================== - -#import "../prelude.typ" as prelude - -#set heading(numbering: none) - -// function for filtering out all heading which are not of level 1 -#let filter_heading(heading) = { - heading.level == 1 -} - -#set page( - header: locate(loc => { - align(left, context [ - #let current_heading = query(selector(heading).after(here())).filter(filter_heading).first() - #current_heading.body - ]) - v(-2em) - align(right, counter(page).display("1")) - v(-1em) - line(length: 100%) - }), -) - -// load bibliography and add it to the document -#bibliography( - style: "ieee", - "../../conf/bibliography.bib" -) \ No newline at end of file diff --git a/src/content/outline.typ b/src/content/outline.typ deleted file mode 100644 index 0999d8e..0000000 --- a/src/content/outline.typ +++ /dev/null @@ -1,149 +0,0 @@ - -// ==================================================== -// -// OUTLINE -// -// Author: Sven Vogel -// License: MIT -// Edited: 29.03.2024 -// -// This file binds and styles the outline of this document -// ==================================================== - -#import "../prelude.typ" as prelude - -#set page( - binding: left, - header-ascent: 2em, - header: locate(loc => { - table(columns: (1fr, auto), - align: (left, right), - stroke: none, - inset: (top: 0pt, bottom: 0.5em, left: 0pt, right: 0pt), - text(size: prelude.to_pt(prelude.format.font-size), prelude.info.titel), - text(size: prelude.to_pt(prelude.format.font-size), counter(page).display("I.")), - table.hline() - ) - }), - footer: "" -) - -#set heading(supplement: [Heading]) -#set page(numbering: "I.", footer: "") - -#if prelude.format.language == "de" [ - = Inhaltsverzeichnis -] else if prelude.format.language == "en" [ - = Table of contents -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -#par(first-line-indent: 0pt)[ - #show outline.entry.where( - level: 1 - ): it => { - strong(it) - } - - #outline(title: none, indent: auto, target: heading.where(supplement: [Heading])) -] - -#pagebreak() - -#if prelude.format.language == "de" [ - = Abbildungsverzeichnis -] else if prelude.format.language == "en" [ - = List of figures -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -#outline( - title: none, - target: figure.where(kind: image), -) - -#pagebreak() - -#if prelude.format.language == "de" [ - = Tabellensverzeichnis -] else if prelude.format.language == "en" [ - = List of tables -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -#outline( - title: none, - target: figure.where(kind: table), -) - -#pagebreak() - -#if prelude.format.language == "de" [ - = Quelltextverzeichnis -] else if prelude.format.language == "en" [ - = List of source code -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -#outline( - title: none, - target: figure.where(kind: raw), -) - -#pagebreak() - -// for creating glossary -#import "@preview/glossarium:0.2.6": make-glossary, print-glossary, gls, glspl -#show: make-glossary - -#if prelude.format.language == "de" [ - = Glossar -] else if prelude.format.language == "en" [ - = Glossary -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -// read all entries from config file -#let glossary = yaml("../../conf/glossary.yaml") -// destination array -#let glossary_entries = () - -// parse YAML 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() - -#if prelude.format.language == "de" [ - = Anhangsverzeichnis -] else if prelude.format.language == "en" [ - = List of appendencies -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -#outline( - title: none, - target: heading.where(supplement: [Appendix]), -) - -// reset page counter -#counter(page).update(0) \ No newline at end of file diff --git a/src/content/preface.typ b/src/content/preface.typ deleted file mode 100644 index 97b7bd1..0000000 --- a/src/content/preface.typ +++ /dev/null @@ -1,34 +0,0 @@ - -// ==================================================== -// -// PREFACE -// -// Author: Sven Vogel -// License: MIT -// Edited: 29.03.2024 -// -// This file binds and styles the preface of this document -// ==================================================== - -#import "../prelude.typ" as prelude - -#set heading(supplement: [Heading]) -#set page(numbering: "I.", footer: "") - -#set page( - binding: left, - header-ascent: 2em, - header: locate(loc => { - table(columns: (1fr, auto), - align: (left, right), - stroke: none, - inset: (top: 0pt, bottom: 0.5em, left: 0pt, right: 0pt), - text(size: prelude.to_pt(prelude.format.font-size), prelude.info.titel), - text(size: prelude.to_pt(prelude.format.font-size), counter(page).display("I.")), - table.hline() - ) - }), - footer: "" -) - -#include "../pages/preface.typ" diff --git a/src/extra/util.typ b/src/extra/util.typ deleted file mode 100644 index 1820b31..0000000 --- a/src/extra/util.typ +++ /dev/null @@ -1,50 +0,0 @@ - -// general document information -#let format = yaml("../../conf/format.yaml") - -#let TitleSize = 2 -#let SubtitleSize = 1.5 -#let LargetextSize = 1.25 - -#let to_em(x) = { - x * 1em -} - -#let to_cm(x) = { - x * 1cm -} - -#let to_pt(x) = { - x * 1pt -} - -// 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: to_pt(format.font-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: to_pt(format.font-size) * SubtitleSize)[#x]) -} - -#let largetext(x) = { - par(justify: false, text(size: to_pt(format.font-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") - ) -} diff --git a/src/lib.typ b/src/lib.typ new file mode 100644 index 0000000..e038171 --- /dev/null +++ b/src/lib.typ @@ -0,0 +1,97 @@ + +// .--------------------------------------------------------------------------. +// | Template of DHBW thesis | +// '--------------------------------------------------------------------------' + +// Author: Sven Vogel +// Edited: 27.06.2024 +// License: MIT + +// start of template pages and styles +#let dhbw-template(config: dictionary, body) = [ + + #import "style.typ": global_styled_doc, content_styled, end_styled + + #let doc = body + + // set document properties + #set document( + author: config.author.name, + keywords: config.thesis.keywords, + title: config.thesis.title) + + // apply global style to every element in the argument content + #global_styled_doc(config: config, body: [ + + #import "pages/titlepage.typ": new_title_page + #import "pages/declaration-of-authorship.typ": new_declaration_of_authorship + #import "pages/confidentiality-statement.typ": new_confidentiality_statement_page + #import "pages/prerelease-note.typ": new_prerelease_note + #import "pages/outline.typ": new_outline + #import "pages/abstract.typ": new_abstract + #import "pages/appendix.typ": show-appendix + + // configure text locale + #set text(lang: config.lang, region: config.region) + + // preppend title page + #new_title_page(config) + + // prelude includes: title, declaration of authorship, confidentiality statement, outline and abstract + // these will have roman page numbers + + #pagebreak(weak: true) + #new_declaration_of_authorship(config) + + #pagebreak(weak: true) + #new_confidentiality_statement_page(config) + + #pagebreak(weak: true) + #new_prerelease_note(config) + + #pagebreak(weak: true) + #new_abstract(config) + + #pagebreak(weak: true) + #new_outline() + + // glossary is built inline here because the links must be + // exposed to the entire document + #import "@preview/glossarium:0.4.1": make-glossary, print-glossary, gls, glspl + #show: make-glossary + + #pagebreak(weak: true) + + #if "glossary" in config.thesis and config.thesis.glossary != none { + heading(supplement: [outline], "Glossar") + + print-glossary(config.thesis.glossary) + + pagebreak(weak: true) + counter(page).update(1) + } + + // mark end of prelude + #metadata("prelude terminate") + + #content_styled(config: config, body: [ + // code of document follows here + #doc + ]) + + #metadata("content terminate") + + #end_styled(config: config, body: [ + // add bibliography if set + #if config.thesis.bibliography != none { + pagebreak(weak: true) + set bibliography(style: "ieee") + config.thesis.bibliography + counter(page).update(1) + } + + // appendix + #show-appendix(config: config) + ]) + ]) +] \ No newline at end of file diff --git a/src/main.typ b/src/main.typ deleted file mode 100644 index 503f31d..0000000 --- a/src/main.typ +++ /dev/null @@ -1,144 +0,0 @@ - -#import "prelude.typ" as prelude - -// ------------------------------------------ -// Set page geometry and PDF meta data -// ------------------------------------------ - -// set page geometry: -// paper format of A4 -// top margin is 2cm (blank space) + 2em (header) + 1em (spacing) -#set page( - margin: (left: 3cm, right: 2cm, top: 2cm + 3em, bottom: 2cm), - paper: "a4", -) - -// set PDF meta information -#set document( - title: prelude.info.titel, - author: prelude.info.autor, - keywords: prelude.info.stichwörter -) - -// ------------------------------------------ -// Configure fonts and headings -// ------------------------------------------ - -// set global text parameter -#set text( - font: prelude.format.font-familty, - size: prelude.to_pt(prelude.format.font-size), - ligatures: prelude.format.ligratures, - hyphenate: prelude.format.hyphenate, - alternates: false, - 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: false, - discretionary-ligatures: prelude.format.ligratures, - lang: prelude.format.language -) - -#show heading.where(level: 1): set text( - font: prelude.format.font-familty, - size: prelude.to_pt(prelude.format.font-size) * 2, - ligatures: prelude.format.ligratures, - hyphenate: prelude.format.hyphenate, - alternates: false, - discretionary-ligatures: prelude.format.ligratures, - lang: prelude.format.language, - weight: "regular" -) - -#show heading.where(level: 2): set text( - font: prelude.format.font-familty, - size: prelude.to_pt(prelude.format.font-size) * 1.5, - ligatures: prelude.format.ligratures, - hyphenate: prelude.format.hyphenate, - alternates: false, - discretionary-ligatures: prelude.format.ligratures, - lang: prelude.format.language, - weight: "regular" -) - -#show heading.where(level: 3): set text( - font: prelude.format.font-familty, - size: prelude.to_pt(prelude.format.font-size) * 1.25, - ligatures: prelude.format.ligratures, - hyphenate: prelude.format.hyphenate, - alternates: false, - discretionary-ligatures: prelude.format.ligratures, - lang: prelude.format.language, - weight: "regular" -) - -// ------------------------------------------ -// Setup paragraphs -// ------------------------------------------ - -// 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) -) - -// ------------------------------------------ -// Start of content -// ------------------------------------------ - -#include "content/audition.typ" -#include "content/preface.typ" -#include "content/outline.typ" - -#set heading(numbering: "1.") - -// start numbering pages with numeric digits -#set page(numbering: "1.") - -#let filter_heading(heading) = { - heading.level == 1 -} - -#set page( - binding: left, - header-ascent: 2em, - header: locate(loc => { - let current_heading = query(selector(heading).after(here())).filter(filter_heading).first() - let heading_depth = counter(heading).get().at(0) + 1 - table(columns: (1fr, auto), - align: (left, right), - stroke: none, - inset: (top: 0pt, bottom: 0.5em, left: 0pt, right: 0pt), - text(size: prelude.to_pt(prelude.format.font-size))[#heading_depth #current_heading.body], - text(size: prelude.to_pt(prelude.format.font-size), counter(page).display("1")), - table.hline() - ) - }), - footer: "" -) - -#set heading(supplement: [Heading]) - -#include "pages/introduction.typ" - -// ------------------------------------------ -// Actual work pages follow here -// ------------------------------------------ - -#include "content/bibliography.typ" - -#include "pages/appendix.typ" \ No newline at end of file diff --git a/src/pages/abstract.typ b/src/pages/abstract.typ index fb57f37..291561a 100644 --- a/src/pages/abstract.typ +++ b/src/pages/abstract.typ @@ -1,17 +1,26 @@ -#import "../prelude.typ" as prelude +// .--------------------------------------------------------------------------. +// | Abstract | +// '--------------------------------------------------------------------------' -= Abstract +// Author: Sven Vogel +// Edited: 28.06.2024 +// License: MIT -// abstract text goes here -#let abstract = [ - -] - -// summary text goes here -// and is only included if the language is set to german -#if prelude.format.language == "de" [ +#let new_abstract(config) = context [ - = Zusammenfassung + #let thesis = config.thesis - + #pagebreak(weak: true) + #align(center + horizon)[ + #if text.lang == "de" [ + = Zusammenfassung + + #thesis.summary + ] + + #pagebreak(weak: true) + = Abstract + + #thesis.abstract + ] ] \ No newline at end of file diff --git a/src/pages/appendix.typ b/src/pages/appendix.typ index 31089f5..5359375 100644 --- a/src/pages/appendix.typ +++ b/src/pages/appendix.typ @@ -1,65 +1,35 @@ -#import "../prelude.typ" as prelude -// ------------------------------------------ -// Appendix setup -// ------------------------------------------ +#let show-appendix(config: dictionary) = context { + counter(heading).update(0) -// function for filtering out all heading which are not of level 1 -#let filter_heading(heading) = { - heading.level == 1 + let title = if text.lang == "en" { + "Appendix" + } else { + "Anhang" + } + + if "appendices" in config.thesis { + pagebreak(weak: true) + + heading(level: 1, numbering: none, title) + v(-2em) + + // APA style appendix + show heading: it => { + let number = if it.numbering != none { + counter(heading).display(it.numbering) + } + block()[ + #title #number - #it.body + ] + } + + 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) + + set heading(numbering: "A.1", supplement: title) + + config.thesis.appendices + } } - -#set page( - binding: left, - header-ascent: 2em, - header: locate(loc => { - let current_heading = query(selector(heading).after(here())).filter(filter_heading).first() - table(columns: (1fr, auto), - align: (left, right), - stroke: none, - inset: (top: 0pt, bottom: 0.5em, left: 0pt, right: 0pt), - text(size: prelude.to_pt(prelude.format.font-size))[#current_heading.body], - text(size: prelude.to_pt(prelude.format.font-size), counter(page).display("1")), - table.hline() - ) - }), - footer: "" -) - -#set heading(numbering: none) - -#if prelude.format.language == "de" [ - = Anhang -] else if prelude.format.language == "en" [ - = Appendix -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -#set heading(numbering: "A.1") - -// reset page counter -#counter(heading).update(1) - -#let appendix(text) = [ - #heading( - supplement: [Appendix], - level: 2, - numbering: "A.1", - )[#text] - <#text> -] - -// ------------------------------------------ -// Put your appendencies here and link them -// to correclty reference them in the document -// ------------------------------------------ - -// Example: -// -// #appendix([Titel]) -// -// Some appendix content goes here - -// Then reference it in the document: -// @Titel diff --git a/src/pages/confidential-clause.typ b/src/pages/confidential-clause.typ deleted file mode 100644 index 6c888dd..0000000 --- a/src/pages/confidential-clause.typ +++ /dev/null @@ -1,31 +0,0 @@ -#import "../prelude.typ" as prelude - -// title -#if prelude.format.language == "de" [ - = Sperrvermerk -] else if prelude.format.language == "en" [ - = Confidential Clause -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -#v(1cm) - -#prelude.largetext()[ - #if prelude.format.language == "de" [ - Der Inhalt dieser Arbeit darf weder als Ganzes noch in - Auszügen Personen außerhalb des Prüfungsprozesses - und des Evaluationsverfahrens zugänglich gemacht werden, - sofern keine anders lautende Genehmigung der Ausbildungsstätte vorliegt. - ] else if prelude.format.language == "en" [ - The content of this thesis may not be made accessible - to persons outside the examination process and the evaluation procedure, - either in whole or in part, unless otherwise authorized by the institution. - ] else [ - #panic("no translation for language: ", prelude.format.language) - ] -] - -#prelude.signature - -#pagebreak() diff --git a/src/pages/confidentiality-statement.typ b/src/pages/confidentiality-statement.typ new file mode 100644 index 0000000..4c508e3 --- /dev/null +++ b/src/pages/confidentiality-statement.typ @@ -0,0 +1,51 @@ + +#let new_confidentiality_statement_page(config) = context [ + + #let thesis = config.thesis + #let author = config.author + + #v(2em) + #if text.lang == "de" [ + #text(size: 20pt, weight: "semibold", font: "Montserrat", "Sperrvermerk") + ] else if text.lang == "en" [ + #text(size: 20pt, weight: "semibold", font: "Montserrat", "Confidentiality statement") + ] + + #if text.lang == "de" [ + Der Inhalt der dieser Arbeit mit dem Thema + ] else if text.lang == "en" [ + The content of this work with the topic + ] + + #v(1em) + + #set align(center) + + *#thesis.title* + + #thesis.subtitle + + #set align(left) + + #v(1em) + + #set par(justify: true) + + #if text.lang == "de" [ + darf weder als Ganzes noch in Auszügen Personen außerhalb des Prüfungsprozesses und des Evalua-tionsverfahrens zugänglich gemacht werden, sofern keine anderslautende Genehmigung der Ausbildungsstätte vorliegt. + ] else if text.lang == "en" [ + may not be made accessible to persons outside the examination process and the evaluation procedure, either as a whole or in excerpts, unless otherwise authorized by the training institution. + ] + + #v(25%) + + #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, if text.lang == "de" [ Ort, Datum ] else if text.lang == "en" [ place, date ] else { panic("no translation for language: ", text.lang) }), + align(left, if text.lang == "de" [ Unterschrift ] else if text.lang == "en" [ Signature ] else { panic("no translation for language: ", text.lang) })) +] \ No newline at end of file diff --git a/src/pages/declaration-of-authorship.typ b/src/pages/declaration-of-authorship.typ new file mode 100644 index 0000000..8b73a45 --- /dev/null +++ b/src/pages/declaration-of-authorship.typ @@ -0,0 +1,50 @@ + +#let new_declaration_of_authorship(config) = context [ + + #let thesis = config.thesis + #let author = config.author + + #v(2em) + #if text.lang == "de" [ + #text(size: 20pt, weight: "semibold", font: "Montserrat", "Selbständigkeitserklärung") + ] else if text.lang == "en" [ + #text(size: 20pt, weight: "semibold", font: "Montserrat", "Declaration of authorship") + ] + + #v(1em) + + #if text.lang == "de" [ + Ich versichere hiermit, dass ich meine Prüfung mit dem Thema + ] else if text.lang == "en" [ + I hereby certify that I have passed my examination with the subject + ] + + #v(1em) + + #set align(center) + + *#thesis.title* + + #thesis.subtitle + + #set align(left) + + #v(1em) + + #set par(justify: true) + + selbständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt habe. Ich versichere zudem, dass die eingereichte elektronische Fassung mit der gedruckten Fassung übereinstimmt. + + #v(25%) + + #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, if text.lang == "de" [ Ort, Datum ] else if text.lang == "en" [ place, date ] else { panic("no translation for language: ", text.lang) }), + align(left, if text.lang == "de" [ Unterschrift ] else if text.lang == "en" [ Signature ] else { panic("no translation for language: ", text.lang) })) + +] \ No newline at end of file diff --git a/src/pages/declaration-of-indipendence.typ b/src/pages/declaration-of-indipendence.typ deleted file mode 100644 index 76c89ea..0000000 --- a/src/pages/declaration-of-indipendence.typ +++ /dev/null @@ -1,49 +0,0 @@ -#import "../prelude.typ" as prelude - -#set align(center) - -// title -#if prelude.format.language == "de" [ - = Selbständigkeitserklärung -] else if prelude.format.language == "en" [ - = Declaration of independence -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -#v(1cm) -#prelude.largetext()[ - #if prelude.format.language == "de" [ - Ich versichere hiermit, dass ich meine #linebreak() Prüfung mit dem Thema - ] else if prelude.format.language == "en" [ - I hereby certify that I have written my #linebreak() exam with the topic - ] else [ - #panic("no translation for language: ", prelude.format.language) - ] -] - -#v(1cm) -#prelude.title(prelude.info.titel) - -// subtitle -#prelude.subtitle(prelude.info.untertitel) - -#set align(left) - -#v(1cm) - -#prelude.largetext()[ - #if prelude.format.language == "de" [ - selbständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt habe. - Ich versichere zudem, dass die eingereichte elektronische Fassung mit der gedruckten Fassung übereinstimmt. - ] else if prelude.format.language == "en" [ - independently and have not used any sources or aids other than those specified. - I also confirm that the electronic version submitted is identical to the printed version. - ] else [ - #panic("no translation for language: ", prelude.format.language) - ] -] - -#prelude.signature - -#pagebreak() \ No newline at end of file diff --git a/src/pages/gender-note.typ b/src/pages/gender-note.typ deleted file mode 100644 index 849b037..0000000 --- a/src/pages/gender-note.typ +++ /dev/null @@ -1,23 +0,0 @@ - -#import "../prelude.typ" as prelude - -// title -#if prelude.format.language == "de" [ - = Gender-Hinweis -] else if prelude.format.language == "en" [ - = Gender note -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -#prelude.largetext()[ - #if prelude.format.language == "de" [ - Zur besseren Lesbarkeit wird in dieser Arbeit das generische Maskulinum verwendet. - Die in dieser Arbeit verwendeten Personenbezeichnungen beziehen sich, sofern nicht anders kenntlich gemacht, auf alle Geschlechter. - ] else if prelude.format.language == "en" [ - For better readability, the generic masculine is used in this work. - The personal designations used in this work refer to all genders, unless otherwise indicated. - ] else [ - #panic("no translation for language: ", prelude.format.language) - ] -] diff --git a/src/pages/introduction.typ b/src/pages/introduction.typ deleted file mode 100644 index 324483d..0000000 --- a/src/pages/introduction.typ +++ /dev/null @@ -1,4 +0,0 @@ - -#import "../prelude.typ" as prelude - -= Einleitung diff --git a/src/pages/outline.typ b/src/pages/outline.typ new file mode 100644 index 0000000..cb84f8b --- /dev/null +++ b/src/pages/outline.typ @@ -0,0 +1,103 @@ + +// render an outline of figures +// with a specific title and filter by a specifc kind of figure +// can optionally insert a pagebreak after the outline +// NOTE: will not render in case the listing is empty +#let render_filtered_outline(title: str, kind: selector) = context { + let elems = query(figure.where(kind: kind), here()) + let count = elems.len() + + // only show outline if there is something to list + if count > 0 { + pagebreak(weak: true) + outline( + title: heading(level: 3, title), + target: figure.where(kind: kind)) + } +} + +#let render_figures_outline() = context { + let title = if (text.lang == "de") { + "Abbildungsverzeichnis" + } else if text.lang == "en" { + "List of Figures" + } + + render_filtered_outline(title: title, kind: image) +} + +#let render_table_outline() = context { + let title = if (text.lang == "de") { + "Tabellenverzeichnis" + } else if text.lang == "en" { + "List of Tables" + } + + render_filtered_outline(title: title, kind: table) +} + +#let render_raw_outline() = context { + let title = if (text.lang == "de") { + "Quelltextverzeichnis" + } else if text.lang == "en" { + "Code Snippets" + } + + render_filtered_outline(title: title, kind: raw) +} + +#let render_heading_outline() = context { + let title = if (text.lang == "de") { + "Inhaltsverzeichnis" + } else if text.lang == "en" { + "Table of Contents" + } + + pagebreak(weak: true) + outline( + target: heading.where(supplement: [chapter]), + title: heading(level: 3, title), + indent: auto) +} + +#let render_appendix_outline() = context { + let supplement = if text.lang == "en" { + [Appendix] + } else { + [Anhang] + } + + if query(heading.where(supplement: supplement)).len() > 0 { + let title = if (text.lang == "de") { + "Anhangsverzeichnis" + } else if text.lang == "en" { + "Table of Appendices" + } + + pagebreak(weak: true) + outline( + target: heading.where(supplement: supplement), + title: heading(level: 3, title), + indent: auto) + } +} + + +#let new_outline() = { + show outline.entry.where( + level: 1, + ): it => { + v(18pt, weak: true) + strong(it) + } + + render_figures_outline() + + render_table_outline() + + render_raw_outline() + + render_appendix_outline() + + render_heading_outline() +} \ No newline at end of file diff --git a/src/pages/preface.typ b/src/pages/preface.typ deleted file mode 100644 index 52b4d19..0000000 --- a/src/pages/preface.typ +++ /dev/null @@ -1,10 +0,0 @@ - -#import "../prelude.typ" as prelude - -= Vorwort - -= Firmengeschichte - -= Das Unternehmen ABB - -= Abteilung diff --git a/src/pages/prerelease-note.typ b/src/pages/prerelease-note.typ new file mode 100644 index 0000000..967b062 --- /dev/null +++ b/src/pages/prerelease-note.typ @@ -0,0 +1,45 @@ + +#let new_prerelease_note(config) = context [ + + #let thesis = config.thesis + #let author = config.author + + #v(2em) + #if text.lang == "de" [ + #text(size: 20pt, weight: "semibold", font: "Montserrat", "Vorabfassung") + ] else if text.lang == "en" [ + #text(size: 20pt, weight: "semibold", font: "Montserrat", "Preliminary version") + ] + + #v(1em) + + #if text.lang == "de" [ + Bei dieser Ausgabe der Arbeit mit dem Thema + ] else if text.lang == "en" [ + This edition of the work with the subject + ] + + #v(1em) + + #set align(center) + + *#thesis.title* + + #thesis.subtitle + + #set align(left) + + #v(1em) + + #set par(justify: true) + + #if text.lang == "de" [ + handelt es sich _nicht_ um die fertige Fassung. Das Dokument kann Inhaltliche-, Grammatikalische- sowie Format-Fehler enthalten. Das Dokument ist im Rahmen der Aufgabenstellung von Seiten der #author.university nicht zur Bewertung freigegeben und ein anderer Verwendungszweck als eine Vorschau ist nicht gestattet. + ] else if text.lang == "en" [ + is not the final version. The document may contain errors in content, grammar and formatting. The document may not be released for evaluation to #author.university as part of the assignment, and any use other than a preview is not permitted. + ] + + #v(1em) + #h(1em) #author.name, #datetime.today().display() + +] \ No newline at end of file diff --git a/src/pages/title.typ b/src/pages/title.typ deleted file mode 100644 index a54f1c7..0000000 --- a/src/pages/title.typ +++ /dev/null @@ -1,142 +0,0 @@ -#import "../prelude.typ" as prelude - -#let LogoHeight = 1.5cm - -#set align(center) - -// 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/svg/ABB.svg", height: LogoHeight)), - // right align logo of DHBW - align(right, image("../../res/svg/DHBW.svg", height: LogoHeight)) -) - -// title -#v(2cm) -#prelude.title(prelude.info.titel) - -// subtitle -#prelude.subtitle(prelude.info.untertitel) - -// type of paper -#v(1cm) -#prelude.largetext(prelude.info.typ) - -// number of semester -#if prelude.format.language == "de" [ - Praxisphase des #prelude.info.semester Studienjahrs -] else if prelude.format.language == "en" [ - Practical phase of the #prelude.info.semester academic year -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -// fakulty -#pad(top: 0.5cm)[ - #if prelude.format.language == "de" [ - an der Fakultät für #prelude.info.fakultät - #linebreak() - im Studiengang #prelude.info.studiengang - ] else if prelude.format.language == "en" [ - at the Faculty of #prelude.info.fakultät - #linebreak() - in the degree program #prelude.info.studiengang - ] else [ - #panic("no translation for language: ", prelude.format.language) - ] -] - -// university -#pad(top: 0.5cm)[ - #if prelude.format.language == "de" [ - an der - ] else if prelude.format.language == "en" [ - at - ] else [ - #panic("no translation for language: ", prelude.format.language) - ] - #linebreak() - #prelude.info.universität -] - -#set align(bottom + left) - -#if prelude.format.language == "de" [ - #table( - columns: 2, - column-gutter: 1cm, - align: left, - stroke: none, - - "Verfasser:", - prelude.info.autor, - - "Bearbeitungszeitraum:", - prelude.info.bearbeitungszeitraum, - - "Matrikelnummer, Kurs:", - str(prelude.info.matrikelnummer) + ", " + prelude.info.studiengang, - - "Ausbildungsbetrieb:", - prelude.info.betrieb, - - "Betrieblicher Betreuer:", - prelude.info.betreuer, - - "Abgabedatum:", - prelude.info.abgabe - ) -] else if prelude.format.language == "en" [ - #table( - columns: 2, - column-gutter: 1cm, - align: left, - stroke: none, - - "Author:", - prelude.info.autor, - - "Editing period:", - prelude.info.bearbeitungszeitraum, - - "Matriculation number, course:", - str(prelude.info.matrikelnummer) + ", " + prelude.info.studiengang, - - "Training company:", - prelude.info.betrieb, - - "Company supervisor:", - prelude.info.betreuer, - - "Submission date:", - prelude.info.abgabe - ) -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -#pad( - top: 1cm, - grid( - // set width of columns - // we need two, so make both half the page width - columns: (60%, 40%), - align(left, if prelude.format.language == "de" [ - Unterschrift des betrieblichen Betreuers - ] else if prelude.format.language == "en" [ - Signature of the company supervisor - ] else [ - #panic("no translation for language: ", prelude.format.language) - ] - ), - align(right, {line(length: 6cm)}) - ) -) - -#pagebreak() - -#counter(page).update(1) diff --git a/src/pages/titlepage.typ b/src/pages/titlepage.typ new file mode 100644 index 0000000..2561a31 --- /dev/null +++ b/src/pages/titlepage.typ @@ -0,0 +1,123 @@ + +#let new_title_page(config) = context [ + + #let thesis = config.thesis + #let author = config.author + + #set align(center) + + // title + #v(2cm) + #text(size: 2em, weight: "semibold", thesis.title) + + // subtitle + #text(size: 1.5em, thesis.subtitle) + + // type of paper + #v(1cm) + #text(size: 1.5em, weight: "bold", thesis.kind) + + // faculty + #pad(top: 0.5cm)[ + #if text.lang == "de" [ + Praxisphase des #author.semester Studienjahrs an der Fakultät für #author.faculty + #linebreak() + im Studiengang #author.program + ] else if text.lang == "en" [ + Practical phase of the #author.semester academic year at the Faculty of #author.faculty + #linebreak() + in the degree program #author.program + ] else [ + #context panic("no translation for language: ", text.lang) + ] + ] + + // university + #pad(top: 0.5cm)[ + #if text.lang == "de" [ + an der + ] else if text.lang == "en" [ + at + ] else [ + #context panic("no translation for language: ", text.lang) + ] + #linebreak() + #author.university + ] + + #set align(bottom + left) + + #if text.lang == "de" [ + #table( + columns: 2, + column-gutter: 1cm, + align: left, + stroke: none, + + [*Verfasser:*], + author.name, + + [*Bearbeitungszeitraum:*], + thesis.timeframe, + + [*Matrikelnummer, Kurs:*], + str(author.matriculation-number) + ", " + author.course, + + [*Ausbildungsbetrieb:*], + author.company, + + [*Betrieblicher Betreuer:*], + author.supervisor, + + [*Abgabedatum:*], + thesis.submission-date + ) + ] else if text.lang == "en" [ + #table( + columns: 2, + column-gutter: 1cm, + align: left, + stroke: none, + + [*Author:*], + author.name, + + [*Editing period:*], + thesis.timeframe, + + [*Matriculation number, course:*], + str(author.matriculation-number) + ", " + author.course, + + [*Training company:*], + author.company, + + [*Company supervisor:*], + author.supervisor, + + [*Submission date:*], + thesis.submission-date + ) + ] else [ + #context panic("no translation for language: ", text.lang) + ] + + #pad( + top: 1cm, + grid( + // set width of columns + // we need two, so make both half the page width + columns: (60%, 40%), + align(left, if text.lang == "de" [ + Unterschrift des betrieblichen Betreuers + ] else if text.lang == "en" [ + Signature of the company supervisor + ] else [ + #context panic("no translation for language: ", text.lang) + ] + ), + align(right, {line(length: 6cm)}) + ) + ) + + #counter(page).update(0) +] diff --git a/src/pages/working-packages.typ b/src/pages/working-packages.typ deleted file mode 100644 index 6e51fbd..0000000 --- a/src/pages/working-packages.typ +++ /dev/null @@ -1,51 +0,0 @@ -#import "../prelude.typ" as prelude - -// title -#if prelude.format.language == "de" [ - = Übersicht Arbeitspakete - Folgende Tabelle zeigt die Aktivtäten welche im Zeitraum vom #prelude.info.bearbeitungszeitraum abgehandelt wurden. -] else if prelude.format.language == "en" [ - = Work package overview - The following table shows the activities that were covered during the #prelude.info.processing period. -] else [ - #panic("no translation for language: ", prelude.format.language) -] - -#let table_align(col, row) = { - if row == 0 { - center - } else { - left - } -} - -#figure( - kind: table, - caption: if prelude.format.language == "de" [ - Übersicht Arbeitspakete - ] else if prelude.format.language == "en" [ - Work package overview - ] else [ - #panic("no translation for language: ", prelude.format.language) - ], - table( - columns: (1fr, auto, auto), - align: table_align, - inset: 0.25cm, - [*Thema*], [*Zeitraum*], [*Dauer (Wochen)*], - ..for packet in prelude.info.arbeits-pakete { - - 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 end_split = packet.ende.split(".") - let end = datetime(day: int(end_split.at(0)), month: int(end_split.at(1)), year: int(end_split.at(2))) - - let dur = end - start - - (packet.thema, packet.start + " - " + packet.ende, str(calc.round(dur.weeks()))) - } - ) -) - -#pagebreak() \ No newline at end of file diff --git a/src/prelude.typ b/src/prelude.typ deleted file mode 100644 index 0492867..0000000 --- a/src/prelude.typ +++ /dev/null @@ -1,9 +0,0 @@ - -// import extras -#import "extra/util.typ": title, subtitle, largetext, signature, to_cm, to_pt, to_em - -// import document information -#let info = yaml("../conf/info.yaml") - -// general document information -#let format = yaml("../conf/format.yaml") \ No newline at end of file diff --git a/res/svg/ABB.svg b/src/res/ABB.svg similarity index 100% rename from res/svg/ABB.svg rename to src/res/ABB.svg diff --git a/res/svg/DHBW.svg b/src/res/DHBW.svg similarity index 100% rename from res/svg/DHBW.svg rename to src/res/DHBW.svg diff --git a/src/res/github.tmTheme b/src/res/github.tmTheme new file mode 100644 index 0000000..6aa306d --- /dev/null +++ b/src/res/github.tmTheme @@ -0,0 +1,1742 @@ + + + + + + name + GitHub + settings + + + + + settings + + + background + #ffffff + foreground + #323232 + invisibles + #000000 + caret + #323232 + + + gutter + #ffffff + gutterForeground + #b3b3b3 + + + guide + #e8e8e8 + stackGuide + #e8e8e8 + activeGuide + #b3b3b3 + + + lineHighlight + #f5f5f5 + findHighlight + #f8eec7 + findHighlightForeground + #323232 + selection + #f8eec7 + selectionBorder + #ffffff + + + bracketsForeground + #63a35c + bracketsOptions + underline + bracketContentsForeground + #63a35c + bracketContentsOptions + underline + + + tagsForeground + #63a35c + tagsOptions + underline + + + + + + name + Comment + scope + comment + settings + + foreground + #969896 + fontStyle + italic + + + + + + name + String + scope + string + settings + + foreground + #183691 + + + + + + name + RegExp Operator + scope + regexp-operator + settings + + foreground + #a71d5d + + + + + + name + RegExp Character Class + scope + string.regexp.characterclass punctuation.definition.string.begin, string.regexp.characterclass punctuation.definition.string.end + settings + + foreground + #a71d5d + + + + + + name + Number + scope + constant.numeric + settings + + foreground + #0086b3 + + + + + + name + Built-in Constant + scope + constant.language + settings + + foreground + #0086b3 + + + + + + name + User-defined Constant + scope + constant.character, constant.other, variable.other.constant + settings + + foreground + #0086b3 + + + + + + name + Variable + scope + variable + settings + + foreground + #323232 + + + + + + name + Keyword + scope + keyword + settings + + foreground + #a71d5d + fontStyle + bold + + + + + + name + Bitwise + scope + bitwise-operator + settings + + foreground + #a71d5d + fontStyle + bold + + + + + + name + Operator Accessor + scope + punctuation.accessor + settings + + foreground + #a71d5d + fontStyle + bold + + + + + + name + Storage + scope + storage + settings + + foreground + #a71d5d + fontStyle + bold + + + + + + name + Storage Type + scope + storage.type + settings + + foreground + #a71d5d + fontStyle + bold + + + + + + name + Class Name + scope + entity.name.class + settings + + foreground + #0086b3 + + + + + + name + Inherited Class + scope + entity.other.inherited-class + settings + + foreground + #0086b3 + + + + + + name + Function Name + scope + entity.name.function + settings + + foreground + #795da3 + fontStyle + bold + + + + + + name + Function Argument + scope + variable.parameter + settings + + foreground + #323232 + + + + + + name + Tag Name + scope + entity.name.tag + settings + + foreground + #63a35c + + + + + + name + Tag Attribute + scope + entity.other.attribute-name + settings + + foreground + #795da3 + + + + + + name + Library Function + scope + support.function + settings + + foreground + #62a35c + + + + + + name + Library Constant + scope + support.constant + settings + + foreground + #0086b3 + + + + + + name + Library Class + scope + support.type, support.class + settings + + foreground + #0086b3 + + + + + + name + Library Variable + scope + support.other.variable + settings + + foreground + #323232 + + + + + + name + Invalid + scope + invalid, invalid.illegal, invalid.deprecated + settings + + background + #f5f5f5 + foreground + #b52a1d + fontStyle + bold + + + + + + + + + name + Find-in-files Filename + scope + entity.name.filename.find-in-files + settings + + foreground + #323232 + fontStyle + bold + + + + name + Find-in-files Line Numbers + scope + constant.numeric.line-number.find-in-files, constant.numeric.line-number.match.find-in-files + settings + + foreground + #b3b3b3 + + + + + + + + + + name + Diff Header + scope + meta.diff.header + settings + + foreground + #969896 + background + #ffffff + fontStyle + italic + + + + + name + Diff Header + scope + meta.diff.header punctuation.definition.from-file.diff + settings + + foreground + #bd2c00 + background + #ffecec + fontStyle + italic bold + + + + + name + Diff Header + scope + meta.diff.header punctuation.definition.to-file.diff + settings + + foreground + #55a532 + background + #eaffea + fontStyle + italic bold + + + + + name + Diff Range + scope + meta.diff.range + settings + + foreground + #969896 + fontStyle + italic bold + + + + + name + Diff Deleted + scope + markup.deleted + settings + + background + #ffecec + + + + + name + Diff Deleted Punctuation + scope + markup.deleted punctuation.definition.inserted + settings + + foreground + #bd2c00 + fontStyle + bold + + + + + name + Diff Inserted + scope + markup.inserted + settings + + background + #eaffea + + + + + name + Diff Inserted Punctuation + scope + markup.inserted punctuation.definition.inserted + settings + + foreground + #55a532 + fontStyle + bold + + + + + + + + + + name + GitGutter Deleted + scope + markup.deleted.git_gutter + settings + + foreground + #bd2c00 + + + + + name + GitGutter Inserted + scope + markup.inserted.git_gutter + settings + + foreground + #55a532 + + + + + name + GitGutter Modified + scope + markup.changed.git_gutter + settings + + foreground + #0086B3 + + + + + name + GitGutter Ignored + scope + markup.ignored.git_gutter + settings + + foreground + #b3b3b3 + + + + + name + GitGutter Untracked + scope + markup.untracked.git_gutter + settings + + foreground + #b3b3b3 + + + + + + + + + + name + Entity Punctuation + scope + source.css punctuation.definition.entity + settings + + foreground + #323232 + + + + + name + Pseudo Selector + scope + source.css entity.other.attribute-name.pseudo-class, source.css entity.other.attribute-name.pseudo-element + settings + + foreground + #a71d5d + + + + + name + Property Value + scope + source.css meta.value, source.css support.constant, source.css support.function + settings + + foreground + #323232 + + + + + name + Color + scope + source.css constant.other.color + settings + + foreground + #ed6a43 + + + + + + + + + + name + Entity Punctuation + scope + source.scss punctuation.definition.entity + settings + + foreground + #323232 + + + + + name + Pseudo Selector + scope + source.scss entity.other.attribute-name.pseudo-class, source.scss entity.other.attribute-name.pseudo-element + settings + + foreground + #a71d5d + + + + + name + Color + scope + source.scss support.constant.property-value, source.scss support.function + settings + + foreground + #323232 + + + + + name + Variable + scope + source.scss variable + settings + + foreground + #a71d5d + + + + + + + + + + name + this + scope + variable.language.this.js + settings + + foreground + #ed6a43 + + + + + name + Function + scope + source.js entity.name.function + settings + + foreground + #323232 + fontStyle + regular + + + + + name + Function Definition + scope + source.js meta.function entity.name.function, source.js entity.name.function meta.function + settings + + foreground + #795da3 + fontStyle + bold + + + + + name + New Function + scope + entity.name.type.new.js + settings + + foreground + #795da3 + + + + + name + Function Prototype + scope + variable.language.prototype.js + settings + + foreground + #0086b3 + + + + + name + Support Function + scope + source.js support.function + settings + + foreground + #0086b3 + + + + + name + Function Prototype + scope + support.type.object.console.js + settings + + foreground + #795da3 + + + + + + + + + + name + JSON Property - 20 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 20 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 19 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 19 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 18 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 18 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 17 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 17 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 16 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 16 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 15 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 15 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 14 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 14 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 13 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 13 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 12 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 12 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 11 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 11 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 10 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 10 Deep + scope + meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 9 Deep + scope + meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 9 Deep + scope + meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 8 Deep + scope + meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 8 Deep + scope + meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 7 Deep + scope + meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 7 Deep + scope + meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 6 Deep + scope + meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 6 Deep + scope + meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 5 Deep + scope + meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 5 Deep + scope + meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 4 Deep + scope + meta meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 4 Deep + scope + meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 3 Deep + scope + meta meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 3 Deep + scope + meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 2 Deep + scope + meta meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 2 Deep + scope + meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property - 1 Deep + scope + meta meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value - 1 Deep + scope + meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + name + JSON Property + scope + meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #183691 + fontStyle + bold + + + + name + JSON Value + scope + meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #323232 + fontStyle + regular + + + + + + + + + + name + Keyword + scope + source.python keyword + settings + + fontStyle + bold + + + + + name + Storage + scope + source.python storage + settings + + fontStyle + bold + + + + + name + Storage Type + scope + source.python storage.type + settings + + fontStyle + bold + + + + + name + Function + scope + source.python entity.name.function + settings + + foreground + #323232 + fontStyle + bold + + + + + + + + + + name + Class + scope + source.php entity.name.type.class + settings + + foreground + #323232 + fontStyle + bold + + + + + + + + + + name + Language Variable + scope + variable.language.ruby + settings + + foreground + #ed6a43 + + + + + name + Module Name + scope + entity.name.type.module.ruby + settings + + foreground + #795da3 + fontStyle + bold + + + + + name + Class Name + scope + entity.name.type.class.ruby + settings + + foreground + #795da3 + fontStyle + bold + + + + + name + Inherited Class + scope + entity.other.inherited-class.ruby + settings + + foreground + #795da3 + fontStyle + bold + + + + + + + + + + name + Punctuation + scope + text.html.markdown punctuation.definition + settings + + foreground + #a71d5d + + + + + name + Separator + scope + text.html.markdown meta.separator + settings + + foreground + #b3b3b3 + + + + + name + Heading + scope + text.html.markdown markup.heading + settings + + fontStyle + bold + + + + + name + Code Block + scope + text.html.markdown markup.raw.block + settings + + foreground + #323232 + + + + + name + Inline Code + scope + text.html.markdown markup.raw.inline + settings + + foreground + #323232 + + + + + name + Link and Image + scope + text.html.markdown meta.link, text.html.markdown meta.image + settings + + foreground + #4183c4 + + + + name + Link URL + scope + text.html.markdown markup.underline.link, text.html.markdown constant.other.reference + settings + + fontStyle + italic + + + + + name + List + scope + text.html.markdown markup.list + settings + + foreground + #ed6a43 + + + + + name + Bold + scope + text.html.markdown markup.bold + settings + + fontStyle + bold + + + + + name + Italic + scope + text.html.markdown markup.italic + settings + + fontStyle + italic + + + + + name + Bold Italic + scope + text.html.markdown markup.bold markup.italic + settings + + fontStyle + bold italic + + + + + name + Italic Bold + scope + text.html.markdown markup.italic markup.bold + settings + + fontStyle + italic bold + + + + + \ No newline at end of file diff --git a/src/style.typ b/src/style.typ new file mode 100644 index 0000000..19258ac --- /dev/null +++ b/src/style.typ @@ -0,0 +1,144 @@ + +// .--------------------------------------------------------------------------. +// | Global style of document | +// '--------------------------------------------------------------------------' + +// Author: Sven Vogel +// Edited: 27.06.2024 +// License: MIT + +#let HeaderPaddingBottom = 1.5em +#let LogoHeight = 3em +#let HeaderUnderlinePaddingTop = 0pt + +// global style of document +#let global_styled_doc(config: dictionary, body: content) = context [ + #let thesis = config.thesis + + // set page geometry + // paper format of A4 + #set page( + paper: "a4", + margin: (left: 3cm, right: 2.5cm, top: 2.5cm, bottom: 2.5cm)) + + #set text( + size: 12pt, + ligatures: true, + hyphenate: true, + dir: ltr, + font: "Open Sans") + + #show heading: set text( + font: "Montserrat", + weight: "semibold") + + #set heading(supplement: [chapter]) + + // 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) + + #set raw(tab-size: 4, theme: "res/github.tmTheme") + #show raw.where(block: true): code => { + show raw.line: line => { + text(fill: gray)[#line.number] + h(1em) + line.body + } + code + } + + #set block(spacing: 2em) + #set par( + justify: true, + first-line-indent: 1em, + leading: 1em) + + #show link: set text(fill: red.darken(15%)) + #show ref: set text(fill: red.darken(15%)) + + #set heading(numbering: none) + #set page( + header-ascent: HeaderUnderlinePaddingTop + HeaderPaddingBottom, + footer-descent: 1em, + margin: (top: 2.5cm + LogoHeight + HeaderUnderlinePaddingTop + HeaderPaddingBottom, bottom: 2.5cm + 1em), + numbering: (..nums) => { + let current-page = here().page() + if current-page == 1{ + [] + } else if query().first().location().page() > current-page { + numbering("I", nums.pos().first()) + } else if query().first().location().page() >= current-page { + numbering("1 / 1", ..nums) + } else { + numbering("a", nums.pos().first()) + } + }, + 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: LogoHeight)), + // right align logo of DHBW + align(right, image("res/DHBW.svg", height: LogoHeight))) + + } else if query().first().location().page() <= here().page() { + let headers-before = query(selector(heading.where(numbering: "1.", level: 1)).before(here())) + + let header-title = thesis.title + + if headers-before.len() > 0 { + header-title = headers-before.last().body + } else { + let headers-after = query(selector(heading.where(numbering: "1.", level: 1)).after(here())) + + if headers-after.len() > 0 { + header-title = headers-after.first().body + } + } + + grid( + columns: (1fr, auto), + align: (horizon, bottom), + context [ _ #header-title _ ], + image("res/DHBW.svg", height: LogoHeight)) + + v(HeaderUnderlinePaddingTop - 1em) + line(length: 100%) + } else { + grid( + columns: (1fr, auto), + align: (horizon, bottom), + context [ _ #config.thesis.title _ ], + image("res/DHBW.svg", height: LogoHeight) + ) + v(HeaderUnderlinePaddingTop - 1em) + line(length: 100%) + } + }) + + #body +] + +#let content_styled(config: dictionary, body: content) = [ + #set heading(numbering: "1.") + + #let thesis = config.thesis + + #body +] + +#let end_styled(config: dictionary, body: content) = [ + + #set heading(numbering: "1.") + + #let thesis = config.thesis + + #body +] diff --git a/template/abstract.typ b/template/abstract.typ new file mode 100644 index 0000000..46959c9 --- /dev/null +++ b/template/abstract.typ @@ -0,0 +1,12 @@ + +// English summary "abstract" is content of this block: +#let abstract = [ + #lorem(100) +] + +// Other languages abstract translation is content of this block: +// NOTE: An abstract is required in case the thesis is not written primarily in english +// if writing in english (and the language is set to "en") this can be let empty or set to none +#let summary = [ + #lorem(100) +] diff --git a/template/appendix.typ b/template/appendix.typ new file mode 100644 index 0000000..09e2c77 --- /dev/null +++ b/template/appendix.typ @@ -0,0 +1,9 @@ + += Raw data +#label("Anhang-A") + +#lorem(50) + +== More raw data + +#lorem(50) diff --git a/template/assets/digitaldog.jpg b/template/assets/digitaldog.jpg new file mode 100644 index 0000000..2a9ec62 Binary files /dev/null and b/template/assets/digitaldog.jpg differ diff --git a/template/glossary.typ b/template/glossary.typ new file mode 100644 index 0000000..2d4bd01 --- /dev/null +++ b/template/glossary.typ @@ -0,0 +1,15 @@ + +#let glossary = ( + ( + key: "oidc", + short: "OIDC", + long: "OpenID Connect", + desc: [OpenID is an open standard and decentralized authentication protocol promoted by the non-profit #link("https://en.wikipedia.org/wiki/OpenID#OpenID_Foundation")[OpenID Foundation].] + ), + ( + key: "potato", + short: "potato", + plural: "potatoes", + desc: [#lorem(10)] + ), +) diff --git a/template/main.typ b/template/main.typ new file mode 100644 index 0000000..400d24c --- /dev/null +++ b/template/main.typ @@ -0,0 +1,112 @@ +#import "../src/lib.typ": dhbw-template + +#import "glossary.typ": glossary +#import "abstract.typ": abstract, summary + +#show: dhbw-template.with( + config: ( + lang: "en", + region: "en", + author: ( + name: "Sven Vogel", + semester: 4, + program: "Informationtechnology", + course: "TINF19IT1", + faculty: "Technik", + university: "DHBW Mannheim", + company: "ABB AG", + supervisor: "Benny Goodman", + matriculation-number: 123456789), + thesis: ( + title: "Unofficial ABB/DHBW Typst template", + subtitle: "for reports and thesises", + submission-date: "23rd march 2020", + timeframe: "1st january 2020 - 20th march 2020", + kind: "T2000", + summary: summary, + abstract: abstract, + keywords: ( "IT", "other stuff" ), + bibliography: bibliography("refs.bib"), + glossary: glossary, + appendices: include "appendix.typ"))) + +#import "@preview/wrap-it:0.1.0": wrap-content + += Lorem Ipsum + +#lorem(25) +@oidc + +#lorem(100) +@Anhang-A + +== Lorem Ipsum 2 + +#lorem(200) +@einstein + += Lorem Ipsum 3 + +#lorem(15) + +$ + angle.l a, b angle.r &= arrow(a) dot arrow(b) \ + &= a_1 b_1 + a_2 b_2 + ... a_n b_n \ + &= sum_(i=1)^n a_i b_i. +$ + +#lorem(140) + +#wrap-content( + figure(image("assets/digitaldog.jpg", width: 200pt), caption: [ Some image caption ]), + lorem(200)) + +#figure( + table( + columns: 2, + "Hello", "World"), + caption: [ Some table ]) + +#pagebreak() + +#figure( + ```rust +use std::env; +use std::fs::OpenOptions; +use std::io::Write; + +fn main() { + // Get the file path from the environment variable + let file_path = match env::var("OUTPUT_FILE") { + Ok(path) => path, + Err(_) => { + eprintln!("Error: OUTPUT_FILE environment variable is not set"); + return; + } + }; + + // Open the file in append mode, create it if it doesn't exist + let mut file = match OpenOptions::new() + .append(true) + .create(true) + .open(&file_path) + { + Ok(file) => file, + Err(e) => { + eprintln!("Error opening file {}: {}", file_path, e); + return; + } + }; + + // Write "Hello, World" to the file + if let Err(e) = writeln!(file, "Hello, World") { + eprintln!("Error writing to file: {}", e); + } else { + println!("Successfully appended 'Hello, World' to {}", file_path); + } +} + ```, caption: [Some code]) + += Conclusion + +#lorem(320) \ No newline at end of file diff --git a/template/refs.bib b/template/refs.bib new file mode 100644 index 0000000..226c7d7 --- /dev/null +++ b/template/refs.bib @@ -0,0 +1,12 @@ +@article{einstein, + author = "Albert Einstein", + title = "{Zur Elektrodynamik bewegter K{\"o}rper}. ({German}) + [{On} the electrodynamics of moving bodies]", + journal = "Annalen der Physik", + volume = "322", + number = "10", + pages = "891--921", + year = "1905", + DOI = "http://dx.doi.org/10.1002/andp.19053221004", + keywords = "physics" +} \ No newline at end of file diff --git a/tests/local-import/main.typ b/tests/local-import/main.typ new file mode 100644 index 0000000..9197122 --- /dev/null +++ b/tests/local-import/main.typ @@ -0,0 +1,29 @@ + +#import "../../src/lib.typ": dhbw-template + +#show: dhbw-template.with( + config: ( + lang: "en", + region: "en", + author: ( + name: "Sven Vogel", + semester: 4, + program: "Informationtechnology", + course: "TINF19IT1", + faculty: "Technik", + university: "DHBW Mannheim", + company: "ABB AG", + supervisor: "Benny Goodman", + matriculation-number: 123456789), + thesis: ( + title: "Unofficial ABB/DHBW Typst template", + subtitle: "for reports and thesises", + submission-date: "23rd march 2020", + timeframe: "1st january 2020 - 20th march 2020", + kind: "T2000", + summary: none, + abstract: none, + keywords: ( "IT", "other stuff" ), + bibliography: none, + glossary: none, + appendices: none))) diff --git a/typst.toml b/typst.toml new file mode 100644 index 0000000..3330b1f --- /dev/null +++ b/typst.toml @@ -0,0 +1,16 @@ +[package] +name = "dhbw-abb-typst-template" +version = "0.1.0" +entrypoint = "src/template.typ" +authors = ["Sven Vogel "] +license = "MIT" +description = "Unoffical typst DHBW/ABB template for use as thesis and report works" +repository = "https://git.montehaselino.de/DHBW/dhbw-abb-typst-template" +keywords = ["dhbw", "abb", "thesis"] +categories = ["paper", "thesis", "report"] +exclude = ["examples"] + +[template] +path = "template" +entrypoint = "main.typ" +thumbnail = "assets/thumbnail.png" \ No newline at end of file