// Stilark for enok-energirapporten. Kopieres til utdatakatalogen og kan tilpasses fritt. #let aksent = rgb("#8c2f1f") #let aksent-lys = rgb("#b9633f") #let moerk = rgb("#1a1a1a") #let mid = rgb("#555555") #let lys = rgb("#f4f1ee") #let kantlinje = rgb("#ddd4cc") // Aksentfarge og overskriftsskrift kan settes av rapporten, slik at den kan følge // firmaets øvrige dokumenter. Verdiene under er enoks egne. #let aksent-valgt = state("aksent-valgt", aksent) #let skrift-valgt = state("skrift-valgt", none) #let font-heading = ("Libertinus Serif", "DejaVu Serif", "Noto Serif") #let font-body = ("Libertinus Serif", "DejaVu Serif", "Noto Serif") #let font-tall = ("DejaVu Sans Mono", "Liberation Mono") /// Skriften rapporten har bedt om, ellers enoks egen. #let overskriftsskrift() = { let valgt = skrift-valgt.get() if valgt == none { font-heading } else { (valgt,) + font-heading } } #let oppsett( tittel: "", undertittel: "", bunntekst: "", avsender: "", farge: none, skrift: none, doc, ) = { aksent-valgt.update(if farge == none { aksent } else { farge }) skrift-valgt.update(skrift) set page( paper: "a4", margin: (top: 2.4cm, bottom: 2.4cm, left: 2.2cm, right: 2.2cm), header: context { if counter(page).get().first() > 1 { grid( columns: (1fr, auto), align: (left + horizon, right + horizon), text(font: overskriftsskrift(), size: 8pt, fill: mid)[#tittel], text(font: font-body, size: 8pt, fill: mid)[#counter(page).display()], ) line(length: 100%, stroke: 0.4pt + kantlinje) } }, footer: context { if counter(page).get().first() > 1 and (bunntekst != "" or avsender != "") { line(length: 100%, stroke: 0.4pt + kantlinje) v(3pt) if avsender != "" { text(font: font-body, size: 7.5pt, fill: mid)[#avsender] linebreak() } text(font: font-body, size: 7.5pt, fill: mid)[#bunntekst] } }, ) set text(font: font-body, size: 10pt, fill: moerk, lang: "nb") set par(justify: true, leading: 0.62em) show heading: it => context { set text(font: overskriftsskrift(), fill: aksent-valgt.get()) block(above: 1.2em, below: 0.6em, it) } show heading.where(level: 1): it => context { set text(size: 15pt, weight: "bold") block(above: 1.6em, below: 0.7em)[ #it.body #v(-0.45em) #line(length: 100%, stroke: 1pt + aksent-valgt.get()) ] } show heading.where(level: 2): set text(size: 11.5pt, weight: "bold") set table(stroke: none, inset: (x: 6pt, y: 4pt)) show table.cell.where(y: 0): set text(weight: "bold", size: 9pt) doc } // Tabell med stripete rader og linje under overskriften. #let tabell(kolonner: (), overskrift: (), rader: (), justering: none, sum-rader: ()) = context { let aksent = aksent-valgt.get() let j = if justering == none { kolonner.map(_ => right) } else { justering } block(breakable: true, table( columns: kolonner, align: (x, y) => if y == 0 { center + bottom } else { j.at(x) + horizon }, fill: (x, y) => if y == 0 { lys } else if sum-rader.contains(y - 1) { rgb("#efe9e4") } else if calc.rem(y, 2) == 0 { rgb("#fbfaf9") } else { white }, stroke: (x, y) => ( bottom: if y == 0 { 0.8pt + aksent } else { 0.3pt + kantlinje }, ), ..overskrift.map(h => [#h]), ..rader.flatten(), )) } // Stor karakterrute på forsiden. #let karakterrute(bokstav, verdi, farge) = { box( fill: farge, radius: 6pt, inset: (x: 16pt, y: 12pt), stack( spacing: 3pt, align(center, text(size: 46pt, weight: "bold", fill: white)[#bokstav]), align(center, text(size: 9pt, fill: white)[#verdi kWh/(m²·år)]), ), ) } #let faktaboks(innhold) = block( fill: lys, radius: 4pt, inset: 9pt, width: 100%, stroke: 0.4pt + kantlinje, innhold, ) #let merknad(innhold) = block( inset: (left: 9pt), stroke: (left: 2pt + aksent-lys), text(size: 9pt)[#innhold], )