template/bergfink.typst

//load defaults cfg dict
$base_cfg.typ()$

// load and join user cfg
#let user_cfg = none
$if(user-config)$
#import "$user-config$" as uc
#(user_cfg = uc.user_cfg)
$else$
$user_cfg.typ()$
$endif$

#(cfg = cfg + user_cfg)

// overwrite base config from pandoc variables
$if(date)$
#let parsedDate = "$date$"
#if type(parsedDate) == str {
  let dateArray = parsedDate.split("-")
  parsedDate = datetime(
    year: int(dateArray.at(0)),
    month: int(dateArray.at(1)),
    day: int(dateArray.at(2)),
  )
}
#(cfg.date = parsedDate)
$endif$

// replace date placeholder
#if cfg.date == "%today%" {
  (cfg.date = datetime.today())
}

$if(dateformat)$
#(cfg.dateformat = "$dateformat$".replace("\\", ""))
$endif$

$if(author)$
#(cfg.authors = (
$for(author)$
$if(author.name)$
    ( name: "$author.name$",
      affiliation: "$author.affiliation$",
      email: "$author.email$",
    ),
$else$
    ( name: "$author$",
      affiliation: "",
      email: "",
    ),
$endif$
$endfor$
  ))
$endif$
$if(title)$
#(cfg.title = "$title$")
$endif$
$if(subtitle)$
#(cfg.subtitle = "$subtitle$")
$endif$
$if(supervisor)$
#(cfg.supervisor = "$supervisor$")
$endif$
$if(keywords)$
#(cfg.keywords = "$for(keywords)$$keywords$$sep$, $endfor$")
$endif$
$if(lang)$
#(cfg.lang = "$lang$")
$endif$
$if(region)$
#(cfg.region = "$region$")
$endif$
$if(margin)$
#(cfg.margin = ($for(margin/pairs)$$margin.key$: $margin.value$,$endfor$))
$endif$
$if(papersize)$
#(cfg.paper = "$papersize$")
$endif$
$if(mainfont)$
#(cfg.font = ($for(mainfont)$"$mainfont$"$sep$, $endfor$,))
$endif$
$if(font)$
#(cfg.font = ($for(font)$"$font$"$sep$, $endfor$,))
$endif$
$if(heading-font)$
#(cfg.heading-font = ($for(heading-font)$"$heading-font$"$sep$, $endfor$,))
$endif$
$if(code-font)$
#(cfg.code-font = ($for(code-font)$"$code-font$"$sep$, $endfor$,))
$endif$
$if(header-footer-font)$
#(cfg.header-footer-font = ($for(header-footer-font)$"$header-footer-font$"$sep$, $endfor$,))
$endif$
$if(fontsize)$
#(cfg.fontsize = $fontsize$)
$endif$
$if(leading)$
#(cfg.leading = $leading$)
$endif$
$if(spacing)$
#(cfg.spacing = $spacing$)
$endif$
$if(no-justify)$
#(cfg.justify = false)
$endif$
$if(pagenumbering)$
#(cfg.page-numbering = "$pagenumbering$")
$endif$
$if(titlepage-rule)$
#(cfg.titlepage-rule = $titlepage-rule$)
$endif$
$if(titlepage-bg)$
#(cfg.titlepage-bg = $titlepage-bg$)
$endif$
$if(titlepage-fg)$
#(cfg.titlepage-fg = $titlepage-fg$)
$endif$
$if(titlepage-logo)$
#(cfg.titlepage-logo = "$titlepage-logo$")
$endif$
$if(titlepage-logo-width)$
#(cfg.titlepage-logo-width = $titlepage-logo-width$)
$endif$
$if(toc)$
#(cfg.toc = true)
$endif$
$if(toc-depth)$
#(cfg.toc-depth = $toc-depth$)
$endif$
$if(toc-own-page)$
#(cfg.toc-own-page = true)
$endif$
$if(lof)$
#(cfg.lof = true)
$endif$
$if(lot)$
#(cfg.lot = true)
$endif$
$if(number-sections)$
#(cfg.number-sections = true)
$endif$
$if(section-numbering)$
#(cfg.section-numbering = "$section-numbering$")
$endif$
$if(columns)$
#(cfg.columns = $columns$)
$endif$
$if(disable-header-and-footer)$
#(cfg.disable-header-and-footer = true)
$endif$
$if(disable-header)$
#(cfg.disable-header = true)
$endif$
$if(disable-footer)$
#(cfg.disable-footer = true)
$endif$
$if(header-footer-stroke)$
#(cfg.header-footer-stroke = $header-footer-stroke$)
$endif$
$if(abstract-title)$
#(cfg.abstract-title = [$abstract-title$])
$endif$
$if(abstract)$
#(cfg.abstract = [$abstract/nowrap$])
$endif$
$if(abstract-own-page)$
#(cfg.abstract-own-page = $abstract-own-page$)
$endif$
$if(thanks-title)$
#(cfg.thanks-title = [$thanks-title$])
$endif$
$if(thanks)$
#(cfg.thanks = [$thanks/nowrap$])
$endif$
$if(header-left)$
#(cfg.header-left = "$header-left$")
$endif$
$if(header-right)$
#(cfg.header-right = "$header-right$")
$endif$
$if(header-center)$
#(cfg.header-center = "$header-center$")
$endif$
$if(footer-left)$
#(cfg.footer-left = "$footer-left$")
$endif$
$if(footer-right)$
#(cfg.footer-right = "$footer-right$")
$endif$
$if(footer-center)$
#(cfg.footer-center = "$footer-center$")
$endif$
$if(figure-prefix)$
#(cfg.figure-prefix = "$figure-prefix$")
$endif$
$if(table-prefix)$
#(cfg.table-prefix = "$table-prefix$")
$endif$
$if(listing-prefix)$
#(cfg.listing-prefix = "$listing-prefix$")
$endif$

$default_styles.typ()$
$yamltable.typ()$

// listings
#show raw.where(block: true): code => {
$if(listings)$
    block(
      fill: gray.lighten(92%),
      inset: 1em,
      stroke: 0.5pt + gray,
      width: 100%,
    )[
      #grid(
        columns: (auto, auto),
        column-gutter: 1em,
        row-gutter: leading * 0.75,
        align: (right, raw.align),
        ..for line in code.lines {
          (
            text(fill: gray)[#line.number],
            line.body,
          )
        },
      )
    ]
$else$
    block(above: 1.5em, below: 1.5em)[
      #set par(leading: leading * 0.75)
      #code
    ]
$endif$
}

$if(equation-numbering)$
#set math.equation(numbering: "$equation-numbering$".replace("\(", "("))
$endif$

$if(glossary)$
#import "@preview/glossarium:0.5.10": make-glossary, register-glossary, print-glossary, gls, glspl
#show: make-glossary
#let glossary-data = yaml("$glossary$")

#let new-glossary-data = ()
#for arr in glossary-data {
  if arr.at("description", default: none) != none {
    arr.description = eval(arr.description, mode: "markup")
    new-glossary-data.push(arr)
  } else {
    new-glossary-data.push(arr)
  }
}

#(glossary-data = new-glossary-data)

#register-glossary(glossary-data)
$endif$

#import "@preview/note-me:0.6.0": *

$for(header-includes)$
$header-includes$
$endfor$

$for(include-before)$
$include-before$
$endfor$

$if(titlepage)$
$titlepage.typ()$
$endif$

$if(abstract)$
$abstract.typ()$
$elseif(thanks)$
$abstract.typ()$
$endif$

$if(toc)$
$toc.typ()$
$endif$

#set page(
  numbering: cfg.page-numbering,
  header: make-header(),
  footer: make-footer(),
  columns: cfg.columns,
)

#counter(page).update(1)

$body$

$for(include-after)$
$include-after$
$endfor$