Kolonnen «Kilde» i forutsetningstabellen fikk for liten plass, fordi de to første kolonnene tok det de ville. Kolonnene har nå faste bredder, og tabellen leses på én linje per rad. En ny [rapport]-tabell i bygningsbeskrivelsen setter logo, aksentfarge, avsenderlinje og skrift for overskrifter, slik at energirapporten kan se ut som firmaets øvrige rapporter. Logoen kopieres til utdatakatalogen; mangler filen, lages rapporten uten den. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015GeH3y8fwTaTudaD88P57o
129 lines
4.0 KiB
Typst
129 lines
4.0 KiB
Typst
// 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],
|
|
)
|
|
|