Compare commits

3 Commits
ieee ... main

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

474
dhsn.typ
View File

@@ -1,232 +1,242 @@
#import "@preview/acrostiche:0.7.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)),
[], [],
( (
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 addendum(supplement: "Anhang", body) = {
pagebreak() pagebreak()
counter(heading).update(0) counter(heading).update(0)
set heading(numbering: none) set heading(numbering: none)
context if query(selector(figure).after(here())).len() > 0 { context if query(selector(figure).after(here())).len() > 0 {
{ {
show regex("(\. ).+"): none show regex("[\n,;.]? *Quelle:.*"): none
{ show ref: none
show heading: none {
heading(numbering: none)[Anhangverzeichnis] show heading: none
} heading(numbering: none)[Anhangverzeichnis]
outline(title: "Anhangverzeichnis", target: selector(figure).after(here())) }
pagebreak() outline(title: "Anhangverzeichnis", target: selector(figure).after(here()))
} pagebreak()
set figure(kind: raw, supplement: "Anhang") }
counter(figure.where(kind: raw)).update(0) set figure(kind: raw, supplement: "Anhang")
counter(figure.where(kind: raw)).update(0)
[= #supplement <dhsn.addendum>]
body [= #supplement <dhsn.addendum>]
pagebreak() body
} else { pagebreak()
body } else {
} body
} }
} }
#let dhsn(
topic: "Thema der Arbeit",
#let dhsn( subtitle: [Art der Arbeit],
topic: "Thema der Arbeit", group: "0XY99-0",
subtitle: [Art der Arbeit], company-data: [Praxispartner GmbH \ 01234 Stadt],
group: "0XY99-0", author: "Maxi Musterfrau",
company-data: [Praxispartner GmbH \ 01234 Stadt], author_gender: none,
author: "Maxi Musterfrau", location: "Dresden",
author_gender: none, consultants: (
location: "Dresden", (
consultants: ( gender: "M",
( name: "Person Eins",
gender: "M", ),
name: "Person Eins", (
), gender: "F",
( name: "Person Zwei",
gender: "F", ),
name: "Person Zwei", ),
), assignment-date: datetime.today(),
), submission-date: datetime.today(),
assignment-date: datetime.today(), bib: none,
submission-date: datetime.today(), body,
bib: none, ) = {
body, // show figure.where(kind: table): set figure(kind: raw, supplement: "Anhang")
) = { set heading(numbering: (..nums) => nums.pos().map(str).join("."))
// 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(
set bibliography(style: "ieee", title: "Literaturverzeichnis") title: topic,
set document( author: author,
title: topic, description: [#subtitle],
author: author, date: submission-date,
description: [#subtitle], )
date: submission-date, set cite(form: "prose")
) show cite: c => {
/*set cite(form: "prose") show "ohne Datum": "o.D."
show cite: c => { show regex("ohne Datum \D\)"): it => {
show "ohne Datum": "o.D." show ")": "])"
show regex("ohne Datum \D\)"): it => { show "ohne Datum ": "o.D.["
show ")": "])" it
show "ohne Datum ": "o.D.[" }
it c
} }
c set text(size: 12pt, lang: "de", region: "de")
}*/ set par(justify: true, leading: 1.2em)
set text(size: 12pt, lang: "de", region: "de") show heading: set block(below: 1.2em)
set par(justify: true, leading: 1.2em) show figure: set par(leading: 0.8em)
show heading: set block(below: 1.2em) show figure.caption: set text(size: 10pt)
show figure: set par(leading: 0.8em) show table: set par(leading: 0.8em)
show figure.caption: set text(size: 10pt) show raw: it => {
show table: set par(leading: 0.8em) if (it.lines.first().count > 1) {
show raw: it => { set par(leading: 1em)
if (it.lines.first().count > 1) { it
set par(leading: 1em) } else {
it it
} else { }
it }
} set page(
} margin: (
set page( top: 2cm,
margin: ( bottom: 2cm,
top: 2cm, left: 3cm,
bottom: 2cm, right: 2cm,
left: 3cm, ),
right: 2cm, footer: context [
), #align(right)[#counter(page).display()]
footer: context [ ],
#align(right)[#counter(page).display()] )
],
) context [
#set page(footer: none, margin: (left: 2cm))
context [ #set text(size: 14pt)
#set page(footer: none, margin: (left: 2cm)) #set par(leading: (1 / 1.2) * 1em)
#set text(size: 14pt) #show heading.where(level: 1): it => {
#set par(leading: (1 / 1.2) * 1em) set text(size: 24pt)
#show heading.where(level: 1): it => { block(it.body)
set text(size: 24pt) }
block(it.body) #grid(
} columns: (50%, 50%),
#grid( gutter: 5pt,
columns: (50%, 50%), align(left + bottom)[Duale Hochschule Sachsen\
gutter: 5pt, Staatliche Studienakademie Dresden\
align(left + bottom)[Duale Hochschule Sachsen\ #group],
Staatliche Studienakademie Dresden\ align(right + bottom)[_Praxispartner:_\ #company-data],
#group], )
align(right + bottom)[_Praxispartner:_\ #company-data],
)
#align(center + horizon)[
#block(width: 15cm, [#heading(level: 1, outlined: false, numbering: none)[#topic]
#align(center + horizon)[ #v(1.5cm)
#block(width: 15cm, [#heading(level: 1, outlined: false, numbering: none)[#topic] #subtitle
#v(1.5cm) #v(1.5cm)
#subtitle eingereicht von:\
#v(1.5cm) #author])
eingereicht von:\ ]
#author]) #align(bottom)[
] #for c in consultants {
#align(bottom)[ if (c.keys().contains("gender") == false) {
#for c in consultants { [Gutachter/in: ]
if (c.keys().contains("gender") == false) { } else if (c.gender == "M") {
[Gutachter/in: ] [Gutachter: ]
} else if (c.gender == "M") { } else if (c.gender == "F") {
[Gutachter: ] [Gutachterin: ]
} else if (c.gender == "F") { }
[Gutachterin: ] c.name
} linebreak()
c.name }
linebreak() #v(1cm)
} Tag der Themenübergabe: #assignment-date.display("[day].[month].[year]")
#v(1cm)
Tag der Themenübergabe: #assignment-date.display("[day].[month].[year]") Tag der Einreichung: #submission-date.display("[day].[month].[year]")
#v(3cm)
Tag der Einreichung: #submission-date.display("[day].[month].[year]") ]
#v(3cm) #pagebreak()
] ]
#pagebreak() set page(numbering: (..nums) => numbering("I", counter(page).get().at(0)))
]
set page(numbering: (..nums) => numbering("I", counter(page).get().at(0))) {
show heading: none
{ heading(numbering: none)[Inhaltsverzeichnis]
show heading: none }
heading(numbering: none)[Inhaltsverzeichnis] outline(indent: 0%)
}
outline(indent: 0%) pagebreak()
pagebreak() context {
show regex("[\n,;.]? *Quelle:.*"): none
context { show ref: none
show regex("(\. ).+"): none if query(selector(figure.where(kind: image).before(<dhsn.addendum>))).len() > 0 {
show ref: none {
if query(selector(figure.where(kind: image).before(<dhsn.addendum>))).len() > 0 { show heading: none
{ heading(numbering: none)[Abbildungsverzeichnis]
show heading: none }
heading(numbering: none)[Abbildungsverzeichnis]
} outline(title: "Abbildungsverzeichnis", target: selector(figure.where(kind: image)).before(<dhsn.addendum>))
}
outline(title: "Abbildungsverzeichnis", target: selector(figure.where(kind: image)).before(<dhsn.addendum>)) if query(selector(figure.where(kind: table)).before(<dhsn.addendum>)).len() > 0 {
} {
if query(selector(figure.where(kind: table)).before(<dhsn.addendum>)).len() > 0 { show heading: none
{ heading(numbering: none)[Tabellenverzeichnis]
show heading: none }
heading(numbering: none)[Tabellenverzeichnis] outline(title: "Tabellenverzeichnis", target: selector(figure.where(kind: table)).before(<dhsn.addendum>))
} }
outline(title: "Tabellenverzeichnis", target: selector(figure.where(kind: table)).before(<dhsn.addendum>)) if (
} query(selector(figure.where(kind: table).or(figure.where(kind: table))).before(<dhsn.addendum>)).len() > 0
if ( ) {
query(selector(figure.where(kind: table).or(figure.where(kind: table))).before(<dhsn.addendum>)).len() > 0 pagebreak()
) { counter(footnote).update(0)
pagebreak() }
counter(footnote).update(0) }
}
} context {
if (_acronyms.final() != none and _acronyms.final().len() > 0) {
context { {
if (_acronyms.final() != none and _acronyms.final().len() > 0) { show heading: none
{ heading(numbering: none)[Abkürzungsverzeichnis]
show heading: none }
heading(numbering: none)[Abkürzungsverzeichnis] print-index(title: "Abkürzungsverzeichnis", row-gutter: 1.2em)
} pagebreak()
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)))
counter(page).update(1)
set page(numbering: (..nums) => numbering("1", counter(page).get().at(0))) body
{
body show "ohne Datum": "o.D."
bib show regex("ohne Datum \D\)"): it => {
statement(location, submission-date, author_gender) 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)
}