commit 42ff25ba01c57f7f16e00598cb604dd519630b97 Author: marius Date: Sun Jun 29 21:21:46 2025 +0200 Initial commit diff --git a/dhsn.typ b/dhsn.typ new file mode 100644 index 0000000..821a71f --- /dev/null +++ b/dhsn.typ @@ -0,0 +1,137 @@ +#let statement(location) = context [ + #pagebreak() + #set heading(numbering: none) + = Eidesstattliche Erklärung + + Ich erkläre an Eides statt, dass ich die vorliegende Arbeit + selbständig und ohne unerlaubte fremde Hilfe angefertigt, andere als + die angegebenen Quellen und Hilfsmittel nicht benutzt habe. Die aus + fremden Quellen direkt oder indirekt übernommenen Stellen sind als + solche kenntlich gemacht.\ + Die Zustimmung des Partnerunternehmens in der Praxis zur Verwen- + dung betrieblicher Unterlagen habe ich eingeholt.\ + Die Arbeit wurde bisher in gleicher oder ähnlicher Form keiner anderen + Prüfungsbehörde vorgelegt und auch nicht veröffentlicht. + + #v(1.5cm) + #grid( + columns: (50%, 50%), + column-gutter: 1cm, + row-gutter: 10pt, + [#location, #datetime.today().display("[day].[month].[year]")], align(bottom, line(length: 6cm, stroke: 0.75pt)), + [Ort, Abgabetermin], [Unterschrift des Verfassers], + ) +] +#let dhsn( + topic: "Thema der Arbeit", + subtitle: [Art der Arbeit], + group: "0XY99-0", + company-data: [Praxispartner GmbH \ 01234 Stadt], + author: "Maxi Musterfrau", + location: "Dresden", + consultants: ( + ( + gender: "M", + name: "Person Eins", + ), + ( + gender: "F", + name: "Person Zwei", + ), + ), + assignment-date: datetime.today(), + submission-date: datetime.today(), + bib: none, + body, +) = { + show figure.where(kind: table): set figure(kind: raw, supplement: "Anhang") + show figure.where(kind: raw): set figure(supplement: "Anhang") + set heading(numbering: (..nums) => nums.pos().map(str).join(".")) + + set bibliography(style: "springer-basic-author-date", title: "Literaturverzeichnis") + set cite(form: "prose") + set text(size: 12pt, lang: "de", region: "de") + set par(justify: true) + set page( + margin: ( + top: 2cm, + bottom: 2cm, + left: 3cm, + right: 3cm, + ), + footer: context [ + #align(right)[#counter(page).display()] + ], + ) + + context [ + #set page(footer: none) + #set text(size: 14pt) + #show heading.where(level: 1): it => { + set text(size: 24pt) + block(it.body) + } + #grid( + columns: (50%, 50%), + gutter: 5pt, + align(left + bottom)[Duale Hochschule Sachsen\ + Staatliche Studienakademie Dresden\ + #group], + align(right + bottom)[_Praxispartner:_\ #company-data], + ) + + + #align(center + horizon)[ + #block(width: 15cm, [#heading(level: 1, outlined: false, numbering: none)[#topic] + #v(1.5cm) + #subtitle + #v(1.5cm) + eingereicht von:\ + #author]) + ] + #align(bottom)[ + #for c in consultants { + if (c.keys().contains("gender") == false) { + [Gutachter/in: ] + } else if (c.gender == "M") { + [Gutachter: ] + } else if (c.gender == "F") { + [Gutachterin: ] + } + c.name + linebreak() + } + #v(1cm) + Tag der Themenübergabe: #assignment-date.display("[day].[month].[year]") + + Tag der Einreichung: #submission-date.display("[day].[month].[year]") + #v(3cm) + ] + #pagebreak() + ] + set page(numbering: (..nums) => numbering("I", counter(page).get().at(0))) + outline(indent: 0%) + pagebreak() + { + show heading: none + heading(numbering: none)[Abbildungsverzeichnis] + } + outline(title: "Abbildungsverzeichnis", target: figure.where(kind: image)) + + + { + show heading: none + heading(numbering: none)[Anhangverzeichnis] + } + outline(title: "Anhangverzeichnis", target: figure.where(kind: table).or(figure.where(kind: raw))) + pagebreak() + counter(page).update(1) + set page(numbering: (..nums) => numbering("1", counter(page).get().at(0))) + + body + + bib + + statement(location) +} + diff --git a/example/paper.typ b/example/paper.typ new file mode 100644 index 0000000..a0675de --- /dev/null +++ b/example/paper.typ @@ -0,0 +1,52 @@ +#import "../dhsn.typ": dhsn + +#show: dhsn.with( + bib: bibliography("sources.yml"), + assignment-date: datetime(year: 2025, month: 7, day: 20) +) + += Kapitel 1 +Im Fließtext kann ich auf #ref() verweisen. + +== Definition + +Leider muss ich auf das tolle Buch verweisen #footnote[Vgl. @makeityourself, S. 10] + +Google #footnote[Vgl. @google] + +Hier ist eine Komplizierte Formel: +$ I(t) = (d Q(t)) / (d t) $ + +...aber es geht noch schlimmer: + +$ arrow(F_L) &= q dot arrow(v) times arrow(B) \ + |arrow(F_L)| &= q |arrow(v)| dot |arrow(B)| dot sin(phi) +$ + +#pagebreak() +#set heading(numbering: "A") +#counter(heading).update(0) += Anhang + +#grid( + columns: (50%, 50%), + align: bottom, + figure( + ```go + import fmt + func main() { + fmt.Println("Hallo Welt") + } + ```, + caption: "Beispiel-Programm in golang", + ), + [#figure( + table( + columns: 2, + "A", $overline("A")$, + "0", "1", + "1", "0", + ), + caption: "Beispieldaten", + )], +) diff --git a/example/sources.yml b/example/sources.yml new file mode 100644 index 0000000..22dd91a --- /dev/null +++ b/example/sources.yml @@ -0,0 +1,13 @@ +google: + type: web + author: Google LLC + date: 2025 + url: + value: https://google.com + date: 2025-06-23 + +makeityourself: + type: book + author: NODE + date: 2025 + title: Make It Yourself - 100 Useful Things to Make \ No newline at end of file