//========================================================== // Karlsruhe Institute of Technology theme for Typst slides. // Based on the official Powerpoint Theme and Latex Template // // You don't need to edit this file. Only presentation.typ // ========================================================= #import "@preview/polylux:0.3.1": * #let _kit-outer-margin = 3mm #let _kit-inner-margin = 11mm #let _kit-top-margin = 10mm #let _kit-bottom-margin = 11mm #let kit-green = rgb(0, 150, 130) #let kit-blue = rgb(70, 100, 170) #let green = kit-green #let blue = kit-blue #let black70 = rgb(64, 64, 64) #let brown = rgb(167, 130, 46) #let purple = rgb(163, 16, 124) #let cyan = rgb(35, 161, 224) #let lime = rgb(140, 182, 60) #let yellow = rgb(252, 229, 0) #let orange = rgb(223, 155, 27) #let red = rgb(162, 34, 35) #let kit-title = state("kit-title", []) #let kit-subtitle = state("kit-subtitle", []) #let kit-short-title = state("kit-short-title", none) #let kit-author = state("kit-author", []) #let kit-short-author = state("kit-short-author", none) #let kit-group-logo = state("kit-group-logo", none) #let kit-institute = state("kit-institute", []) #let kit-date = state("kit-date", none) #let kit-show-page-count = state("kit-show-page-count", false) //================= // Helper functions //================= #let kit-logo(..rest) = context { if text.lang == "de" { image("/assets/kit/logo-de.svg", ..rest) } else { image("/assets/kit/logo-en.svg", ..rest) } } #let kit-rounded-block(radius: 3mm, body) = { block( radius: ( top-right: radius, bottom-left: radius, ), clip: true, body, ) } #let kit-list-marker = move( dy: 0.125em, kit-rounded-block( radius: 0.15em, rect( // The latex documentclass uses a size of 1ex, but type only supports em. width: 0.5em, height: 0.5em, fill: kit-green, ), ), ) #let kit-theme( title: none, subtitle: none, short-title: none, author: none, short-author: none, language: "de", group-logo: none, institute: none, date: none, aspect-ratio: "16-9", show-page-count: false, body, ) = { if language not in ("en", "de") { panic("Only English (en) and German (de) are currently supported") } set page(margin: 0pt, header-ascent: 0pt, footer-descent: 0pt) // Use power point page sizes, as they differ from default typst page sizes. set page(width: 25.4cm, height: 14.29cm) if aspect-ratio == "16-9" set page(width: 25.4cm, height: 15.88cm) if aspect-ratio == "16-10" set page(width: 25.4cm, height: 19.05cm) if aspect-ratio == "4-3" if aspect-ratio not in ("16-9", "16-10", "4-3") { panic("Unsupported aspect ratio") } set text(lang: language, font: ("Arial", "Helvetica", "Roboto")) set list(marker: kit-list-marker) kit-title.update(title) kit-subtitle.update(subtitle) if short-title == none { kit-short-title.update(title) } else { kit-short-title.update(short-title) } kit-author.update(author) if short-author == none { kit-short-author.update(author) } else { kit-short-author.update(short-author) } kit-institute.update(institute) kit-group-logo.update(group-logo) kit-date.update(date) kit-show-page-count.update(show-page-count) body } //================= // slides //================= #let title-slide(banner: none) = { show: polylux-slide if banner == none { banner = image("/assets/kit/banner.jpg") } // Top half pad(left: _kit-inner-margin, right: 6mm, top: _kit-top-margin)[ // KIT logo #place[ #kit-logo(width: 45mm) ] // Group logo #place(right)[ #block(width: 30mm, height: 30mm)[ #set image(width: 100%) #context kit-group-logo.get() ] ] // Title #place(dy: 32mm, text(weight: "bold", size: 26pt, kit-title.display())) // Subtitle #place(dy: 44mm)[ #set text(weight: "bold", size: 18pt) #set par(leading: 0.3em) #kit-subtitle.display() ] ] // Bottom half align( bottom, pad(x: _kit-outer-margin)[ // Banner #block(height: 60mm, below: 0pt)[ #kit-rounded-block(radius: 3mm)[ #set image(width: 100%, height: 100%) #banner ] ] // Footer #block(height: _kit-bottom-margin, width: 100%)[ #grid( columns: (auto, 1fr), [ #align(left + horizon)[ #block(height: 100%)[ #set text(size: 8pt) #context { if text.lang == "en" [ KIT - The Research University in the Helmholtz Association ] else if text.lang == "de" [ KIT - Die Forschungsuniversität in der Helmholtz-Gemeinschaft ] } ] ] ], [ #align( right + horizon, block(height: 100%)[ #link( "https://www.kit.edu", text("www.kit.edu", weight: "bold", size: 16.5pt), ) ], ) ], ) ] ], ) } #let slide(title: [], body) = { // Title bar let header = block(width: 100%, height: 100%, inset: (x: _kit-inner-margin))[ #grid( columns: (auto, 1fr), [ #set text(24pt, weight: "bold") // We need a block here to force the grid to take the full height of the surrounding block #block(height: 100%)[ #align(left + bottom, title) ] ], [ #align(right + bottom)[ #kit-logo(width: 30mm) ] ], ) ] // Content block let wrapped-body = block( width: 100%, height: 100%, inset: (x: _kit-inner-margin, top: 15.5mm), )[ #set text(18pt) // Default value, but had to be changed for layout #set block(above: 1.2em) #body ] // Footer let footer = block(width: 100%, inset: (x: _kit-outer-margin))[ #set block(above: 0pt) #set text(size: 9pt) #line(stroke: rgb("#d8d8d8"), length: 100%) #block(width: 100%, height: 100%)[ #align(horizon)[ #grid( columns: (20mm, 30mm, 1fr, auto), pad( left: 6mm, context if kit-show-page-count.get() [ #logic.logical-slide.display()/#strong(utils.last-slide-number) ] else [ #logic.logical-slide.display() ], ), kit-date.display(), [#kit-short-author.display() - #kit-short-title.display()], align(right, kit-institute.display()), ) ] ] ] set page( header: header, footer: footer, margin: (top: 22.5mm, bottom: _kit-bottom-margin), ) polylux-slide(wrapped-body) } // This function is left here for backwards compatibility only. Please use #slide(side-by-side[][]) instead. #let split-slide(title: [], body-left, body-right) = { let body = grid( columns: (1fr, 1fr), gutter: 2em, body-left, body-right, ) slide(title: title, body) } #let kit-color-block(title: [], color: [], body) = { // 80% is a rough heuristic, that produces the correct result for all predefined colors. // Might be adjusted in the future let title-color = if luma(color).components().at(0) >= 80% { black } else { white } kit-rounded-block()[ #block( width: 100%, inset: (x: 0.5em, top: 0.3em, bottom: 0.4em), fill: gradient.linear( (color, 0%), (color, 87%), (color.lighten(85%), 100%), dir: ttb, ), text(fill: title-color, title), ) #set text(size: 15pt) #block( inset: 0.5em, above: 0pt, fill: color.lighten(85%), width: 100%, body, ) ] } #let kit-info-block(title: [], body) = { kit-color-block(title: title, color: kit-green, body) } #let kit-example-block(title: [], body) = { kit-color-block(title: title, color: kit-blue, body) } #let kit-alert-block(title: [], body) = { kit-color-block(title: title, color: red.lighten(10%), body) }