#let acronyms = ( XML: "Extensible Markup Language", ) #let acro(name) = context { // Prüfen, ob das Akronym vorher schon verwendet wurde let previous = query(selector().before(here())) .filter(it => it.value == name) // Marker setzen für diese Verwendung [#metadata(name)] // 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()) .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() ) }