diff --git a/.gitignore b/.gitignore index f08278d..5eba6c3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -*.pdf \ No newline at end of file +*.pdf +*.log diff --git a/conf/format.yaml b/conf/format.yaml index 2b4d668..790896d 100644 --- a/conf/format.yaml +++ b/conf/format.yaml @@ -6,4 +6,4 @@ 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: "Noto Serif" \ No newline at end of file +font-familty: "TeX Gyre Termes" diff --git a/info.yaml b/conf/info.yaml similarity index 100% rename from info.yaml rename to conf/info.yaml diff --git a/res/font/Noto Serif/LICENSE.txt b/res/font/Noto Serif/LICENSE.txt deleted file mode 100644 index 09f020b..0000000 --- a/res/font/Noto Serif/LICENSE.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2022 The Noto Project Authors (https://github.com/notofonts/latin-greek-cyrillic) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/res/font/Noto Serif/Noto Serif Bold.ttf b/res/font/Noto Serif/Noto Serif Bold.ttf deleted file mode 100644 index aa21d44..0000000 Binary files a/res/font/Noto Serif/Noto Serif Bold.ttf and /dev/null differ diff --git a/res/font/Noto Serif/Noto Serif Italic.ttf b/res/font/Noto Serif/Noto Serif Italic.ttf deleted file mode 100644 index 786ecc7..0000000 Binary files a/res/font/Noto Serif/Noto Serif Italic.ttf and /dev/null differ diff --git a/res/font/Noto Serif/Noto Serif Regular.ttf b/res/font/Noto Serif/Noto Serif Regular.ttf deleted file mode 100644 index dc30297..0000000 Binary files a/res/font/Noto Serif/Noto Serif 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 new file mode 100644 index 0000000..c181d55 Binary files /dev/null and b/res/font/tex-gyre-termes/texgyretermes-bold.otf differ diff --git a/res/font/tex-gyre-termes/texgyretermes-bolditalic.otf b/res/font/tex-gyre-termes/texgyretermes-bolditalic.otf new file mode 100644 index 0000000..028b170 Binary files /dev/null and b/res/font/tex-gyre-termes/texgyretermes-bolditalic.otf differ diff --git a/res/font/tex-gyre-termes/texgyretermes-italic.otf b/res/font/tex-gyre-termes/texgyretermes-italic.otf new file mode 100644 index 0000000..935f9db Binary files /dev/null and b/res/font/tex-gyre-termes/texgyretermes-italic.otf differ diff --git a/res/font/tex-gyre-termes/texgyretermes-regular.otf b/res/font/tex-gyre-termes/texgyretermes-regular.otf new file mode 100644 index 0000000..20f26fb Binary files /dev/null and b/res/font/tex-gyre-termes/texgyretermes-regular.otf differ diff --git a/src/content/audition.typ b/src/content/audition.typ new file mode 100644 index 0000000..000f270 --- /dev/null +++ b/src/content/audition.typ @@ -0,0 +1,46 @@ + +// ==================================================== +// +// 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) +#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 new file mode 100644 index 0000000..03f99e1 --- /dev/null +++ b/src/content/bibliography.typ @@ -0,0 +1,39 @@ + +// ==================================================== +// +// 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 new file mode 100644 index 0000000..acdea85 --- /dev/null +++ b/src/content/outline.typ @@ -0,0 +1,119 @@ + +// ==================================================== +// +// 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: "" +) + +#let heading_outline_title = if prelude.format.language == "de" [ + Inhaltsverzeichnis +] else if prelude.format.language == "en" [ + Table of contents +] else [ + #panic("no translation for language: ", prelude.format.language) +] +#outline(title: heading_outline_title, indent: auto) + +#pagebreak() + +#let image_outline_title = 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: image_outline_title, + target: figure.where(kind: image), +) + +#pagebreak() + +#let table_outline_title = 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: table_outline_title, + target: figure.where(kind: table), +) + +#pagebreak() + +#let raw_outline_title = if prelude.format.language == "de" [ + Quelltextverzeichnis +] else if prelude.format.language == "en" [ + Table of source code +] else [ + #panic("no translation for language: ", prelude.format.language) +] +#outline( + title: raw_outline_title, + 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 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) + +// 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 new file mode 100644 index 0000000..b4b3f5c --- /dev/null +++ b/src/content/preface.typ @@ -0,0 +1,31 @@ + +// ==================================================== +// +// 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 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/main.typ b/src/main.typ index f64d90e..1e3ed5b 100644 --- a/src/main.typ +++ b/src/main.typ @@ -1,20 +1,36 @@ #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 + 2em, bottom: 2cm), + margin: (left: 3cm, right: 2cm, top: 2cm + 3em, bottom: 2cm), paper: "a4", ) +// set PDF meta information +#set document( + author: prelude.info.autor, + date: datetime.today(), + 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: prelude.format.ligratures, + alternates: false, discretionary-ligatures: prelude.format.ligratures, lang: prelude.format.language ) @@ -25,7 +41,7 @@ size: prelude.to_pt(prelude.format.font-size), ligatures: prelude.format.ligratures, hyphenate: prelude.format.hyphenate, - alternates: prelude.format.ligratures, + alternates: false, discretionary-ligatures: prelude.format.ligratures, lang: prelude.format.language ) @@ -35,11 +51,10 @@ size: prelude.to_pt(prelude.format.font-size) * 2, ligatures: prelude.format.ligratures, hyphenate: prelude.format.hyphenate, - alternates: prelude.format.ligratures, + alternates: false, discretionary-ligatures: prelude.format.ligratures, lang: prelude.format.language, - weight: "regular", - baseline: 1em + weight: "regular" ) #show heading.where(level: 2): set text( @@ -47,7 +62,7 @@ size: prelude.to_pt(prelude.format.font-size) * 1.5, ligatures: prelude.format.ligratures, hyphenate: prelude.format.hyphenate, - alternates: prelude.format.ligratures, + alternates: false, discretionary-ligatures: prelude.format.ligratures, lang: prelude.format.language, weight: "regular" @@ -58,12 +73,16 @@ size: prelude.to_pt(prelude.format.font-size) * 1.25, ligatures: prelude.format.ligratures, hyphenate: prelude.format.hyphenate, - alternates: prelude.format.ligratures, + 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( @@ -77,191 +96,45 @@ first-line-indent: prelude.to_cm(prelude.format.first-line-indent) ) -// set PDF meta information -#set document( - author: prelude.info.autor, - date: datetime.today(), - keywords: prelude.info.stichwörter -) +// ------------------------------------------ +// Start of content +// ------------------------------------------ -#set heading(numbering: none) -#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: 1em, - header: locate(loc => { - text(size: 12pt)[ - #prelude.info.titel - #v(-2em) - #align(right, counter(page).display("I.")) - #v(-1em) - #line(length: 100%) - ] - }), - footer: "" -) - -#include "pages/gender-note.typ" -#include "pages/working-packages.typ" - -#let heading_outline_title = if prelude.format.language == "de" [ - Inhaltsverzeichnis -] else if prelude.format.language == "en" [ - Table of contents -] else [ - #panic("no translation for language: ", prelude.format.language) -] -#outline(title: heading_outline_title, indent: auto) - -#pagebreak() - -#let image_outline_title = 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: "Abbildungsverzeichnis", - target: figure.where(kind: image), -) - -#pagebreak() - -#let table_outline_title = 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: table_outline_title, - target: figure.where(kind: table), -) - -#pagebreak() - -#let raw_outline_title = if prelude.format.language == "de" [ - Quelltextverzeichnis -] else if prelude.format.language == "en" [ - Table of source code -] else [ - #panic("no translation for language: ", prelude.format.language) -] -#outline( - title: raw_outline_title, - 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 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 +#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: 1em, + header-ascent: 2em, header: locate(loc => { - align(left, context [ - #let current_heading = query(selector(heading).after(here())).filter(filter_heading).first() - #let heading_depth = counter(heading).get().at(0) + 1 - - #heading_depth - #h(0.25cm) - #current_heading.body - ]) - v(-2em) - align(right, counter(page).display("1")) - v(-1em) - line(length: 100%) + 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 page(numbering: "1.") +#include "pages/introduction.typ" -= Kapitel +// ------------------------------------------ +// Actual work pages follow here +// ------------------------------------------ -== Überschrift 2 - -#pagebreak() - -#lorem(200) - -= Kapitel 2 - -=== Überschrift 3 - -#lorem(50) - -#pagebreak() - -#set heading(numbering: none) -#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%) - }), -) - -#bibliography( - style: "ieee", - "../conf/bibliography.bib" -) \ No newline at end of file +#include "content/bibliography.typ" diff --git a/src/pages/abstract.typ b/src/pages/abstract.typ new file mode 100644 index 0000000..fb57f37 --- /dev/null +++ b/src/pages/abstract.typ @@ -0,0 +1,17 @@ +#import "../prelude.typ" as prelude + += Abstract + +// 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" [ + + = Zusammenfassung + + +] \ No newline at end of file diff --git a/src/pages/declaration-of-indipendence.typ b/src/pages/declaration-of-indipendence.typ index 3d81ef6..76c89ea 100644 --- a/src/pages/declaration-of-indipendence.typ +++ b/src/pages/declaration-of-indipendence.typ @@ -28,7 +28,10 @@ // 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. diff --git a/src/pages/gender-note.typ b/src/pages/gender-note.typ index 83a327d..849b037 100644 --- a/src/pages/gender-note.typ +++ b/src/pages/gender-note.typ @@ -21,5 +21,3 @@ #panic("no translation for language: ", prelude.format.language) ] ] - -#pagebreak() diff --git a/src/pages/introduction.typ b/src/pages/introduction.typ new file mode 100644 index 0000000..793dbe4 --- /dev/null +++ b/src/pages/introduction.typ @@ -0,0 +1,8 @@ + +#import "../prelude.typ" as prelude + += Einleitung + +#pagebreak() + += Test \ No newline at end of file diff --git a/src/pages/preface.typ b/src/pages/preface.typ new file mode 100644 index 0000000..52b4d19 --- /dev/null +++ b/src/pages/preface.typ @@ -0,0 +1,10 @@ + +#import "../prelude.typ" as prelude + += Vorwort + += Firmengeschichte + += Das Unternehmen ABB + += Abteilung diff --git a/src/pages/title.typ b/src/pages/title.typ index 2629044..a54f1c7 100644 --- a/src/pages/title.typ +++ b/src/pages/title.typ @@ -68,6 +68,7 @@ #if prelude.format.language == "de" [ #table( columns: 2, + column-gutter: 1cm, align: left, stroke: none, @@ -92,6 +93,7 @@ ] else if prelude.format.language == "en" [ #table( columns: 2, + column-gutter: 1cm, align: left, stroke: none, diff --git a/src/prelude.typ b/src/prelude.typ index 42b1ff7..0492867 100644 --- a/src/prelude.typ +++ b/src/prelude.typ @@ -3,7 +3,7 @@ #import "extra/util.typ": title, subtitle, largetext, signature, to_cm, to_pt, to_em // import document information -#let info = yaml("../info.yaml") +#let info = yaml("../conf/info.yaml") // general document information #let format = yaml("../conf/format.yaml") \ No newline at end of file