From 16ab666f74ee3655c9164de5974eb4d2adabece1 Mon Sep 17 00:00:00 2001 From: Marius Date: Wed, 4 Mar 2026 21:29:18 +0100 Subject: [PATCH] Bump acrostiche to v0.7.0 --- dhsn.typ | 484 +++++++++++++++++++++++++++---------------------------- 1 file changed, 242 insertions(+), 242 deletions(-) diff --git a/dhsn.typ b/dhsn.typ index 9145844..c37f708 100644 --- a/dhsn.typ +++ b/dhsn.typ @@ -1,242 +1,242 @@ -#import "@preview/acrostiche:0.6.0": * - -#let statement(location, submission-date, gender) = context [ - #pagebreak() - #set heading(numbering: none) - #set page(footer: none, 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 Verwendung 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( - column-gutter: 1cm, - columns: (50%, 50%), - row-gutter: 10pt, - [#location, #submission-date.display("[day].[month].[year]")], align(bottom, line(length: 6cm, stroke: 0.75pt)), - [], - ( - if gender == none { - [Unterschrift des Verfassers] - } else if (gender == "M") { - [Unterschrift des Verfassers] - } else if (gender == "F") { - [Unterschrift der Verfasserin] - } - ), - ) - -] -#let addendum(supplement: "Anhang", body) = { - pagebreak() - counter(heading).update(0) - set heading(numbering: none) - context if query(selector(figure).after(here())).len() > 0 { - { - show regex("[\n,;.]? *Quelle:.*"): none - show ref: none - { - show heading: none - heading(numbering: none)[Anhangverzeichnis] - } - outline(title: "Anhangverzeichnis", target: selector(figure).after(here())) - pagebreak() - } - set figure(kind: raw, supplement: "Anhang") - counter(figure.where(kind: raw)).update(0) - - [= #supplement ] - body - pagebreak() - } else { - body - } -} -#let dhsn( - topic: "Thema der Arbeit", - subtitle: [Art der Arbeit], - group: "0XY99-0", - company-data: [Praxispartner GmbH \ 01234 Stadt], - author: "Maxi Musterfrau", - author_gender: none, - 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") - set heading(numbering: (..nums) => nums.pos().map(str).join(".")) - - set bibliography(style: "harvard-cite-them-right", title: "Literaturverzeichnis") - set document( - title: topic, - author: author, - description: [#subtitle], - date: submission-date, - ) - set cite(form: "prose") - show cite: c => { - show "ohne Datum": "o.D." - show regex("ohne Datum \D\)"): it => { - show ")": "])" - show "ohne Datum ": "o.D.[" - it - } - c - } - set text(size: 12pt, lang: "de", region: "de") - set par(justify: true, leading: 1.2em) - show heading: set block(below: 1.2em) - show figure: set par(leading: 0.8em) - show figure.caption: set text(size: 10pt) - show table: set par(leading: 0.8em) - show raw: it => { - if (it.lines.first().count > 1) { - set par(leading: 1em) - it - } else { - it - } - } - set page( - margin: ( - top: 2cm, - bottom: 2cm, - left: 3cm, - right: 2cm, - ), - footer: context [ - #align(right)[#counter(page).display()] - ], - ) - - context [ - #set page(footer: none, margin: (left: 2cm)) - #set text(size: 14pt) - #set par(leading: (1 / 1.2) * 1em) - #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))) - - { - show heading: none - heading(numbering: none)[Inhaltsverzeichnis] - } - outline(indent: 0%) - - pagebreak() - - context { - show regex("[\n,;.]? *Quelle:.*"): none - show ref: none - if query(selector(figure.where(kind: image).before())).len() > 0 { - { - show heading: none - heading(numbering: none)[Abbildungsverzeichnis] - } - - outline(title: "Abbildungsverzeichnis", target: selector(figure.where(kind: image)).before()) - } - if query(selector(figure.where(kind: table)).before()).len() > 0 { - { - show heading: none - heading(numbering: none)[Tabellenverzeichnis] - } - outline(title: "Tabellenverzeichnis", target: selector(figure.where(kind: table)).before()) - } - if ( - query(selector(figure.where(kind: table).or(figure.where(kind: table))).before()).len() > 0 - ) { - pagebreak() - counter(footnote).update(0) - } - } - - context { - if (_acronyms.final() != none and _acronyms.final().len() > 0) { - { - show heading: none - heading(numbering: none)[Abkürzungsverzeichnis] - } - print-index(title: "Abkürzungsverzeichnis", row-gutter: 1.2em) - pagebreak() - } - } - counter(page).update(1) - set page(numbering: (..nums) => numbering("1", counter(page).get().at(0))) - - body - { - show "ohne Datum": "o.D." - show regex("ohne Datum \D\)"): it => { - show ")": "])" - show "ohne Datum ": "o.D.[" - it - } - show regex(`Zugegriffen\: \d+`.text): it => { - let day = str.replace(it.text, "Zugegriffen: ", "") - "Abgerufen am " + day + "." - } - bib - } - statement(location, submission-date, author_gender) -} - +#import "@preview/acrostiche:0.7.0": * + +#let statement(location, submission-date, gender) = context [ + #pagebreak() + #set heading(numbering: none) + #set page(footer: none, 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 Verwendung 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( + column-gutter: 1cm, + columns: (50%, 50%), + row-gutter: 10pt, + [#location, #submission-date.display("[day].[month].[year]")], align(bottom, line(length: 6cm, stroke: 0.75pt)), + [], + ( + if gender == none { + [Unterschrift des Verfassers] + } else if (gender == "M") { + [Unterschrift des Verfassers] + } else if (gender == "F") { + [Unterschrift der Verfasserin] + } + ), + ) + +] +#let addendum(supplement: "Anhang", body) = { + pagebreak() + counter(heading).update(0) + set heading(numbering: none) + context if query(selector(figure).after(here())).len() > 0 { + { + show regex("[\n,;.]? *Quelle:.*"): none + show ref: none + { + show heading: none + heading(numbering: none)[Anhangverzeichnis] + } + outline(title: "Anhangverzeichnis", target: selector(figure).after(here())) + pagebreak() + } + set figure(kind: raw, supplement: "Anhang") + counter(figure.where(kind: raw)).update(0) + + [= #supplement ] + body + pagebreak() + } else { + body + } +} +#let dhsn( + topic: "Thema der Arbeit", + subtitle: [Art der Arbeit], + group: "0XY99-0", + company-data: [Praxispartner GmbH \ 01234 Stadt], + author: "Maxi Musterfrau", + author_gender: none, + 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") + set heading(numbering: (..nums) => nums.pos().map(str).join(".")) + + set bibliography(style: "harvard-cite-them-right", title: "Literaturverzeichnis") + set document( + title: topic, + author: author, + description: [#subtitle], + date: submission-date, + ) + set cite(form: "prose") + show cite: c => { + show "ohne Datum": "o.D." + show regex("ohne Datum \D\)"): it => { + show ")": "])" + show "ohne Datum ": "o.D.[" + it + } + c + } + set text(size: 12pt, lang: "de", region: "de") + set par(justify: true, leading: 1.2em) + show heading: set block(below: 1.2em) + show figure: set par(leading: 0.8em) + show figure.caption: set text(size: 10pt) + show table: set par(leading: 0.8em) + show raw: it => { + if (it.lines.first().count > 1) { + set par(leading: 1em) + it + } else { + it + } + } + set page( + margin: ( + top: 2cm, + bottom: 2cm, + left: 3cm, + right: 2cm, + ), + footer: context [ + #align(right)[#counter(page).display()] + ], + ) + + context [ + #set page(footer: none, margin: (left: 2cm)) + #set text(size: 14pt) + #set par(leading: (1 / 1.2) * 1em) + #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))) + + { + show heading: none + heading(numbering: none)[Inhaltsverzeichnis] + } + outline(indent: 0%) + + pagebreak() + + context { + show regex("[\n,;.]? *Quelle:.*"): none + show ref: none + if query(selector(figure.where(kind: image).before())).len() > 0 { + { + show heading: none + heading(numbering: none)[Abbildungsverzeichnis] + } + + outline(title: "Abbildungsverzeichnis", target: selector(figure.where(kind: image)).before()) + } + if query(selector(figure.where(kind: table)).before()).len() > 0 { + { + show heading: none + heading(numbering: none)[Tabellenverzeichnis] + } + outline(title: "Tabellenverzeichnis", target: selector(figure.where(kind: table)).before()) + } + if ( + query(selector(figure.where(kind: table).or(figure.where(kind: table))).before()).len() > 0 + ) { + pagebreak() + counter(footnote).update(0) + } + } + + context { + if (_acronyms.final() != none and _acronyms.final().len() > 0) { + { + show heading: none + heading(numbering: none)[Abkürzungsverzeichnis] + } + print-index(title: "Abkürzungsverzeichnis", row-gutter: 1.2em) + pagebreak() + } + } + counter(page).update(1) + set page(numbering: (..nums) => numbering("1", counter(page).get().at(0))) + + body + { + show "ohne Datum": "o.D." + show regex("ohne Datum \D\)"): it => { + show ")": "])" + show "ohne Datum ": "o.D.[" + it + } + show regex(`Zugegriffen\: \d+`.text): it => { + let day = str.replace(it.text, "Zugegriffen: ", "") + "Abgerufen am " + day + "." + } + bib + } + statement(location, submission-date, author_gender) +} +