Compare commits

..

9 Commits

Author SHA1 Message Date
16ab666f74 Bump acrostiche to v0.7.0 2026-03-04 21:29:18 +01:00
7bc2ba0c33 backport addendum-index fix 2026-02-24 08:06:21 +01:00
78966cecde backport/update dependencies 2026-02-12 08:01:12 +01:00
5c09e20dc6 Add supplement for addendum 2025-09-11 16:53:41 +02:00
5cd21dd2cf Fix Outline Styles when using Figure sources 2025-09-10 08:35:21 +02:00
f77021aa57 Add #show: addendum
Add #show: addendum before your addendum to insert an addendum-outline and correct formatting
2025-09-09 13:34:31 +02:00
add3eff5a6 Modify outlines
Please tag your "Addendum"-Heading with <dhsn.addendum> and use #addendum-outline() before your addendum!
2025-09-09 11:48:40 +02:00
2c42f6f55f correct line spacing outside of text blocks 2025-09-05 09:18:51 +02:00
e8cbd09b8a fix formatting in addendum and code blocks 2025-09-04 10:32:51 +02:00

449
dhsn.typ
View File

@@ -1,207 +1,242 @@
#import "@preview/acrostiche:0.6.0": * #import "@preview/acrostiche:0.7.0": *
#let statement(location, submission-date, gender) = context [ #let statement(location, submission-date, gender) = context [
#pagebreak() #pagebreak()
#set heading(numbering: none) #set heading(numbering: none)
#set page(footer: none, numbering: none) #set page(footer: none, numbering: none)
= Eidesstattliche Erklärung = Eidesstattliche Erklärung
Ich erkläre an Eides statt, dass ich die vorliegende Arbeit Ich erkläre an Eides statt, dass ich die vorliegende Arbeit
selbständig und ohne unerlaubte fremde Hilfe angefertigt, andere als selbständig und ohne unerlaubte fremde Hilfe angefertigt, andere als
die angegebenen Quellen und Hilfsmittel nicht benutzt habe. Die aus die angegebenen Quellen und Hilfsmittel nicht benutzt habe. Die aus
fremden Quellen direkt oder indirekt übernommenen Stellen sind als fremden Quellen direkt oder indirekt übernommenen Stellen sind als
solche kenntlich gemacht.\ solche kenntlich gemacht.\
Die Zustimmung des Partnerunternehmens in der Praxis zur Verwendung betrieblicher Unterlagen habe ich eingeholt.\ 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 Die Arbeit wurde bisher in gleicher oder ähnlicher Form keiner anderen
Prüfungsbehörde vorgelegt und auch nicht veröffentlicht. Prüfungsbehörde vorgelegt und auch nicht veröffentlicht.
#v(1.5cm) #v(1.5cm)
#grid( #grid(
column-gutter: 1cm, column-gutter: 1cm,
columns: (50%, 50%), columns: (50%, 50%),
row-gutter: 10pt, row-gutter: 10pt,
[#location, #submission-date.display("[day].[month].[year]")], [#location, #submission-date.display("[day].[month].[year]")], align(bottom, line(length: 6cm, stroke: 0.75pt)),
align(bottom, line(length: 6cm, stroke: 0.75pt)), [],
[], (
( if gender == none {
if gender == none { [Unterschrift des Verfassers]
[Unterschrift des Verfassers] } else if (gender == "M") {
} else if (gender == "M") { [Unterschrift des Verfassers]
[Unterschrift des Verfassers] } else if (gender == "F") {
} else if (gender == "F") { [Unterschrift der Verfasserin]
[Unterschrift der Verfasserin] }
} ),
), )
)
]
] #let addendum(supplement: "Anhang", body) = {
#let dhsn( pagebreak()
topic: "Thema der Arbeit", counter(heading).update(0)
subtitle: [Art der Arbeit], set heading(numbering: none)
group: "0XY99-0", context if query(selector(figure).after(here())).len() > 0 {
company-data: [Praxispartner GmbH \ 01234 Stadt], {
author: "Maxi Musterfrau", show regex("[\n,;.]? *Quelle:.*"): none
author_gender: none, show ref: none
location: "Dresden", {
consultants: ( show heading: none
( heading(numbering: none)[Anhangverzeichnis]
gender: "M", }
name: "Person Eins", outline(title: "Anhangverzeichnis", target: selector(figure).after(here()))
), pagebreak()
( }
gender: "F", set figure(kind: raw, supplement: "Anhang")
name: "Person Zwei", counter(figure.where(kind: raw)).update(0)
),
), [= #supplement <dhsn.addendum>]
assignment-date: datetime.today(), body
submission-date: datetime.today(), pagebreak()
bib: none, } else {
body, body
) = { }
// show figure.where(kind: table): set figure(kind: raw, supplement: "Anhang") }
show figure.where(kind: raw): set figure(supplement: "Anhang") #let dhsn(
set heading(numbering: (..nums) => nums.pos().map(str).join(".")) topic: "Thema der Arbeit",
subtitle: [Art der Arbeit],
set bibliography(style: "harvard-cite-them-right", title: "Literaturverzeichnis") group: "0XY99-0",
set cite(form: "prose") company-data: [Praxispartner GmbH \ 01234 Stadt],
show cite: c => { author: "Maxi Musterfrau",
show "ohne Datum": "o.D." author_gender: none,
show regex("ohne Datum \D\)"): it => { location: "Dresden",
show ")": "])" consultants: (
show "ohne Datum ": "o.D.[" (
it gender: "M",
} name: "Person Eins",
c ),
} (
set text(size: 12pt, lang: "de", region: "de") gender: "F",
set par(justify: true, leading: 1.2em) name: "Person Zwei",
show heading: set block(below: 1.2em) ),
show figure: set par(leading: 1em) ),
set page( assignment-date: datetime.today(),
margin: ( submission-date: datetime.today(),
top: 2cm, bib: none,
bottom: 2cm, body,
left: 3cm, ) = {
right: 2cm, // show figure.where(kind: table): set figure(kind: raw, supplement: "Anhang")
), set heading(numbering: (..nums) => nums.pos().map(str).join("."))
footer: context [
#align(right)[#counter(page).display()] set bibliography(style: "harvard-cite-them-right", title: "Literaturverzeichnis")
], set document(
) title: topic,
author: author,
context [ description: [#subtitle],
#set page(footer: none, margin: (left: 2cm)) date: submission-date,
#set text(size: 14pt) )
#show heading.where(level: 1): it => { set cite(form: "prose")
set text(size: 24pt) show cite: c => {
block(it.body) show "ohne Datum": "o.D."
} show regex("ohne Datum \D\)"): it => {
#grid( show ")": "])"
columns: (50%, 50%), show "ohne Datum ": "o.D.["
gutter: 5pt, it
align(left + bottom)[Duale Hochschule Sachsen\ }
Staatliche Studienakademie Dresden\ c
#group], }
align(right + bottom)[_Praxispartner:_\ #company-data], 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)
#align(center + horizon)[ show figure.caption: set text(size: 10pt)
#block(width: 15cm, [#heading(level: 1, outlined: false, numbering: none)[#topic] show table: set par(leading: 0.8em)
#v(1.5cm) show raw: it => {
#subtitle if (it.lines.first().count > 1) {
#v(1.5cm) set par(leading: 1em)
eingereicht von:\ it
#author]) } else {
] it
#align(bottom)[ }
#for c in consultants { }
if (c.keys().contains("gender") == false) { set page(
[Gutachter/in: ] margin: (
} else if (c.gender == "M") { top: 2cm,
[Gutachter: ] bottom: 2cm,
} else if (c.gender == "F") { left: 3cm,
[Gutachterin: ] right: 2cm,
} ),
c.name footer: context [
linebreak() #align(right)[#counter(page).display()]
} ],
#v(1cm) )
Tag der Themenübergabe: #assignment-date.display("[day].[month].[year]")
context [
Tag der Einreichung: #submission-date.display("[day].[month].[year]") #set page(footer: none, margin: (left: 2cm))
#v(3cm) #set text(size: 14pt)
] #set par(leading: (1 / 1.2) * 1em)
#pagebreak() #show heading.where(level: 1): it => {
] set text(size: 24pt)
set page(numbering: (..nums) => numbering("I", counter(page).get().at(0))) block(it.body)
}
{ #grid(
show heading: none columns: (50%, 50%),
heading(numbering: none)[Inhaltsverzeichnis] gutter: 5pt,
} align(left + bottom)[Duale Hochschule Sachsen\
outline(indent: 0%) Staatliche Studienakademie Dresden\
#group],
pagebreak() align(right + bottom)[_Praxispartner:_\ #company-data],
)
context {
if query(figure.where(kind: image)).len() > 0 {
{ #align(center + horizon)[
show heading: none #block(width: 15cm, [#heading(level: 1, outlined: false, numbering: none)[#topic]
heading(numbering: none)[Abbildungsverzeichnis] #v(1.5cm)
} #subtitle
outline(title: "Abbildungsverzeichnis", target: figure.where(kind: image)) #v(1.5cm)
pagebreak() eingereicht von:\
} #author])
} ]
context { #align(bottom)[
if query(figure.where(kind: raw)).len() > 0 { #for c in consultants {
{ if (c.keys().contains("gender") == false) {
show heading: none [Gutachter/in: ]
heading(numbering: none)[Anhangsverzeichnis] } else if (c.gender == "M") {
} [Gutachter: ]
outline(title: "Anhangsverzeichnis", target: figure.where(kind: raw)) } else if (c.gender == "F") {
pagebreak() [Gutachterin: ]
} }
} c.name
context { linebreak()
if query(figure.where(kind: table)).len() > 0 { }
{ #v(1cm)
show heading: none Tag der Themenübergabe: #assignment-date.display("[day].[month].[year]")
heading(numbering: none)[Tabellenverzeichnis]
} Tag der Einreichung: #submission-date.display("[day].[month].[year]")
outline(title: "Tabellenverzeichnis", target: figure.where(kind: table)) #v(3cm)
pagebreak() ]
} #pagebreak()
} ]
set page(numbering: (..nums) => numbering("I", counter(page).get().at(0)))
context {
if (acros.get() != none and acros.get().len() > 0) { {
{ show heading: none
show heading: none heading(numbering: none)[Inhaltsverzeichnis]
heading(numbering: none)[Abkürzungsverzeichnis] }
} outline(indent: 0%)
print-index(title: "Abkürzungsverzeichnis", row-gutter: 0.5em)
pagebreak() pagebreak()
}
} context {
counter(page).update(1) show regex("[\n,;.]? *Quelle:.*"): none
set page(numbering: (..nums) => numbering("1", counter(page).get().at(0))) show ref: none
if query(selector(figure.where(kind: image).before(<dhsn.addendum>))).len() > 0 {
body {
{ show heading: none
show "ohne Datum": "o.D." heading(numbering: none)[Abbildungsverzeichnis]
show regex("ohne Datum \D\)"): it => { }
show ")": "])"
show "ohne Datum ": "o.D.[" outline(title: "Abbildungsverzeichnis", target: selector(figure.where(kind: image)).before(<dhsn.addendum>))
it }
} if query(selector(figure.where(kind: table)).before(<dhsn.addendum>)).len() > 0 {
show regex(`Zugegriffen\: \d+`.text): it => { {
let day = str.replace(it.text, "Zugegriffen: ", "") show heading: none
"Abgerufen am " +day+ "." heading(numbering: none)[Tabellenverzeichnis]
} }
bib outline(title: "Tabellenverzeichnis", target: selector(figure.where(kind: table)).before(<dhsn.addendum>))
} }
statement(location, submission-date, author_gender) if (
} query(selector(figure.where(kind: table).or(figure.where(kind: table))).before(<dhsn.addendum>)).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)
}