#let pgcounter = context [ real page: #here().page() / #counter(page).final().first() ]; #set page( paper: "presentation-16-9", fill: rgb("222"), footer: align(center, pgcounter), ) #set text(fill: white) #let s_topic = state("topic", (color: red)); #let seite(n) = [#page( background: context { import "@preview/cetz:0.3.2" let pages = query(selector().before(query(selector().after(here())).first().location())) let last = counter().final().first() let size = 100 / last [ #place( bottom + left, stack(dir: ltr, ..pages.map(pg => { let seg_start = ((counter().at(pg.location()).first() + 1) / last) * 100 - 50; link(pg.location(), box(width: size * 1%, height: 0.5%)) }),) ) #place( bottom + left, cetz.canvas( length: 1%, { import cetz.draw: * for pg in pages.rev() { let seg_start = ((counter().at(pg.location()).first() + 1) / last) * 100 - 50 rect((seg_start - size - 0.1, 0), (seg_start, 0.5), fill: s_topic.at(pg.location()).color, stroke: none) } }, ), ) ] }, )[#lorem(n * 20) #align(bottom)[#text(size: 4em)[Slide #n] ] ] ]; #let s = state("foo", "bar"); #for i in (1, 2, 3, 4) { seite(i) } #s_topic.update((color: blue)) #for i in (5, 6, 7) { seite(i) } #page[= miau 1] #page[= miau 2] #s_topic.update((color: green)) #for i in (8, 9) { seite(i) } #page[= miau 3] #s_topic.update((color: yellow)) #for i in (10, 11, 12) { seite(i) } #text(context s.get())