Bump acrostiche to v0.7.0

This commit is contained in:
2026-03-04 21:29:18 +01:00
parent 7bc2ba0c33
commit 16ab666f74

484
dhsn.typ
View File

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