Migrate headers to package hydra

This commit is contained in:
Julius Freudenberger 2026-07-07 17:18:38 +02:00
parent 017b6e5f88
commit 1b69639706

48
lib.typ
View file

@ -1,5 +1,6 @@
#import "modules/titlepage.typ": *
#import "@preview/glossarium:0.5.9": print-glossary
#import "@preview/hydra:0.6.3": hydra
#let in-outline = state("in-outline", false)
#let flex-caption(long, short) = context {
@ -149,47 +150,13 @@
set page(
// Header with current heading
header: context {
let elements = query(
selector(heading.where(depth: 1)).after(here())
grid(columns: (1fr, 1fr),
align(left, emph(hydra(1))),
align(right, emph(hydra(2)))
)
// Don't show header if a new chapter is starting at the current page
if elements != () and elements.first().location().page() == here().page() and elements.first().depth == 1 {
return;
if hydra(1) != none {
line(length: 100%, stroke: 0.5pt, start: (0%, -1.8em))
}
let display-heading
let display-numbering
let element
elements = query(selector(heading).after(here()))
if elements != () and elements.first().location().page() == here().page() {
element = elements.first()
if element.has("numbering") and element.numbering != none {
display-numbering = numbering(element.numbering, ..counter(heading).at(element.location()))
} else {
display-numbering = numbering(settings.headings-numbering-style, ..counter(heading).at(element.location()))
}
display-heading = element.body
} else {
// Otherwise take the next heading backwards
elements = query(
heading.where().before(here())
)
if elements != () {
element = elements.last()
if element.has("numbering") and element.numbering != none {
display-numbering = numbering(element.numbering, ..counter(heading).at(element.location()))
} else {
display-numbering = numbering(settings.headings-numbering-style, ..counter(heading).at(element.location()))
}
display-heading = element.body
}
}
align(center, display-numbering + " " + display-heading)
line(length: 100%, stroke: (paint: gray))
},
// Footer with Page Numbering
@ -197,8 +164,7 @@
let current-page = counter(page).display()
let final-page = counter(page).final().first()
line(length: 100%, stroke: (paint: gray))
align(center)[#current-page / #final-page]
align(right, current-page)
}
)