43 lines
1.0 KiB
Typst
43 lines
1.0 KiB
Typst
#let acronyms = (
|
|
XML: "Extensible Markup Language",
|
|
)
|
|
|
|
#let acro(name) = context {
|
|
// Prüfen, ob das Akronym vorher schon verwendet wurde
|
|
let previous = query(selector(<acro>).before(here()))
|
|
.filter(it => it.value == name)
|
|
|
|
// Marker setzen für diese Verwendung
|
|
[#metadata(name)<acro>]
|
|
|
|
// Beim ersten Mal: volle Form mit Abkürzung, danach: nur Kurzform
|
|
if previous.len() == 0 {
|
|
link(label("acro-" + name))[
|
|
#acronyms.at(name) (#name)
|
|
]
|
|
} else {
|
|
link(label("acro-" + name))[#name]
|
|
}
|
|
}
|
|
|
|
#let acro-list() = context {
|
|
// Alle verwendeten Akronyme sammeln
|
|
let used = query(selector(<acro>))
|
|
.map(it => it.value)
|
|
.dedup()
|
|
|
|
// Nur verwendete Akronyme filtern und sortieren
|
|
let entries = acronyms.pairs()
|
|
.filter(pair => used.contains(pair.at(0)))
|
|
.sorted(key: pair => pair.at(0))
|
|
|
|
table(
|
|
columns: (auto, 1fr),
|
|
stroke: none,
|
|
column-gutter: 1em,
|
|
..entries.map(pair => (
|
|
[#strong(pair.at(0)) #label("acro-" + pair.at(0))],
|
|
[#pair.at(1)]
|
|
)).flatten()
|
|
)
|
|
} |