From 97deb04c5b7a26d42d3452babc5aaf265aec9db6 Mon Sep 17 00:00:00 2001 From: Piotr Kuszewski <38344235+piotr-m-kuszewski@users.noreply.github.com> Date: Tue, 30 Jun 2026 14:56:43 +0200 Subject: [PATCH 1/5] [Typship] Add typst.toml --- packages/preview/sgh-presentation/0.1.2/typst.toml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 packages/preview/sgh-presentation/0.1.2/typst.toml diff --git a/packages/preview/sgh-presentation/0.1.2/typst.toml b/packages/preview/sgh-presentation/0.1.2/typst.toml new file mode 100644 index 0000000000..1a70d954b3 --- /dev/null +++ b/packages/preview/sgh-presentation/0.1.2/typst.toml @@ -0,0 +1,13 @@ +[package] +name = "sgh-presentation" +version = "0.1.2" +entrypoint = "sgh-presentation.typ" +authors = ["Piotr Kuszewski "] +license = "MIT" +description = "A bilingual (Polish and English) Touying presentation theme following the visual identity of the SGH Warsaw School of Economics." +repository = "https://github.com/piotr-m-kuszewski/Szablony_Typst_SGH" +keywords = ["presentation", "slides", "touying", "SGH", "Warsaw School of Economics"] +categories = ["presentation"] +disciplines = ["economics"] +compiler = "0.13.0" +exclude = ["thumbnail.png"] From a42662ce9a772d76efb073b35bdd037b7639b0d8 Mon Sep 17 00:00:00 2001 From: Piotr Kuszewski <38344235+piotr-m-kuszewski@users.noreply.github.com> Date: Tue, 30 Jun 2026 14:56:44 +0200 Subject: [PATCH 2/5] [Typship] Add LICENSE --- .../preview/sgh-presentation/0.1.2/LICENSE | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 packages/preview/sgh-presentation/0.1.2/LICENSE diff --git a/packages/preview/sgh-presentation/0.1.2/LICENSE b/packages/preview/sgh-presentation/0.1.2/LICENSE new file mode 100644 index 0000000000..d01ff80e12 --- /dev/null +++ b/packages/preview/sgh-presentation/0.1.2/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Piotr Kuszewski + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file From 63b19dcb02ac0208898b86006a881d0741b15a34 Mon Sep 17 00:00:00 2001 From: Piotr Kuszewski <38344235+piotr-m-kuszewski@users.noreply.github.com> Date: Tue, 30 Jun 2026 14:56:45 +0200 Subject: [PATCH 3/5] [Typship] Add sgh-presentation.typ --- .../0.1.2/sgh-presentation.typ | 664 ++++++++++++++++++ 1 file changed, 664 insertions(+) create mode 100644 packages/preview/sgh-presentation/0.1.2/sgh-presentation.typ diff --git a/packages/preview/sgh-presentation/0.1.2/sgh-presentation.typ b/packages/preview/sgh-presentation/0.1.2/sgh-presentation.typ new file mode 100644 index 0000000000..fc0cc0e665 --- /dev/null +++ b/packages/preview/sgh-presentation/0.1.2/sgh-presentation.typ @@ -0,0 +1,664 @@ +// This theme is inspired by Metropolis theme originally shipped with Touying 0.6.1 +// The Touying Metropolis theme is inspired by https://github.com/matze/mtheme +// The origin code was written by https://github.com/Enivex + +#import "@preview/touying:0.7.4": * + +#let sgh-green = rgb("#007481") +#let sgh-blue = rgb("#00b5e2") +#let sgh-text = rgb("#23373b") + +#let sgh-logotyp = ```xml + + + + + + + + + + + +```.text + +#let sgh-kwadrat-en = ```xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +```.text + +#let sgh-kwadrat-pl = ```xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +```.text + +#let loc-pl-en(pl, en) = context { + if text.lang == "en" { en } else { pl } +} + +/// Domyślna funkcja slajdu dla prezentacji. +/// - title (string): Tytuł slajdu. Domyślnie `auto`. +/// - config (dictionary): Konfiguracja slajdu. Możesz użyć `config-xxx` +/// aby ustawić konfigurację slajdu. Dla kilku konfiguracji możesz użyć +/// `utils.merge-dicts` aby je połączyć. +/// - repeat (int, string): Liczba podslajdów. Domyślnie `auto`, co oznacza, +/// że touying automatycznie obliczy liczbę podslajdów. Argument `repeat` +/// jest konieczny gdy używasz kodu podobnego do `#slide(repeat: 3, self => [ .. ])` aby utworzyć slajd. Style `uncover` i `only` oparte na odwołaniach nie mogą być automatycznie wykryte przez touying. +/// - setting (function): Ustawienia slajdu. Możesz go używać aby dodać +/// reguły set/show dla slajdu. +/// - composer (function, array): Komponent composer slajdu. Możesz go używać aby ustawić +/// układ slajdu. Na przykład, `#slide(composer: (1fr, 2fr, 1fr))[A][B][C]` +/// aby podzielić slajd na trzy części. Pierwsza i ostatnia część zajmą +/// 1/4 slajdu, a druga część zajmie 1/2 slajdu. Jeśli przekażesz +/// wartość niebędącą funkcją jak `(1fr, 2fr, 1fr)`, zostanie przyjęta jako pierwszy +/// argument funkcji `components.side-by-side`. +/// Funkcja `components.side-by-side` jest prostym opakowaniem funkcji `grid`. +/// Oznacza to, że możesz użyć `grid.cell(colspan: 2, ..)` aby sprawić, że komórka zajmie +/// 2 kolumny. +/// Na przykład, `#slide(composer: 2)[A][B][#grid.cell(colspan: 2)[Footer]]` +/// sprawi, że komórka `Footer` zajmie 2 kolumny. +/// +/// Jeśli chcesz dostosować układ, możesz przekazać funkcję do argumentu `composer`. +/// Funkcja powinna otrzymać zawartość slajdu i zwrócić +/// zawartość slajdu, na przykład `#slide(composer: grid.with(columns: 2))[A][B]`. +/// +/// - bodies (array): Zawartość slajdu. Możesz wywoływać funkcję `slide` +/// z składnią `#slide[A][B][C]` aby utworzyć slajd. +// -> none +#let slide( + title: auto, + align: auto, + config: (:), + repeat: auto, + setting: body => body, + composer: auto, + ..bodies, +) = touying-slide-wrapper(self => { + if align != auto { + self.store.align = align + } + let header(self) = { + set std.align(top) + show: components.cell.with(fill: self.colors.primary-lightest, inset: 1em) + set std.align(horizon) + set text(fill: sgh-green, weight: 900, size: 1.5em) + components.left-and-right( + { + if title != auto { + utils.fit-to-width(grow: false, 100%, title) + } else { + utils.call-or-display(self, self.store.header) + } + }, + utils.call-or-display(self, self.store.header-right), + ) + } + let footer(self) = { + set std.align(bottom) + set text(size: 0.8em) + pad( + .5em, + components.left-and-right( + //image(bytes(sgh-logotyp), format: "svg", height: 1em), + text(fill: self.colors.neutral-darkest.lighten(40%), utils.call-or-display(self, self.store.footer)), + text(fill: self.colors.neutral-darkest, utils.call-or-display(self, self.store.footer-right)), + ), + ) + if self.store.footer-progress { + place(bottom, components.progress-bar(height: 2pt, self.colors.primary, self.colors.primary-light)) + } + } + let self = utils.merge-dicts( + self, + config-page( + fill: self.colors.neutral-lightest, + header: header, + footer: footer, + ), + ) + let new-setting = body => { + show: std.align.with(self.store.align) + set text(fill: self.colors.neutral-darkest) + show: setting + body + } + touying-slide(self: self, config: config, repeat: repeat, setting: new-setting, composer: composer, ..bodies) +}) + +/// Strona tytułowa dla prezentacji. Powinieneś zaktualizować informacje w +/// funkcji `config-info`. Możesz również przekazać informacje bezpośrednio do +/// funkcji `title-slide`. +/// +/// Przykład: +/// ```typst +/// #show: sgh-presentation-theme.with( +/// config-info( +/// title: [Tytuł], +/// author: [Autor], +/// institution: [Instytucja], +/// logo: emoji.city, +/// ), +/// footer: [Moja stopka], +/// footer-progress: true, +/// aspect-ratio: "4-3", +/// ) +/// +/// #title-slide(subtitle: [Podtytuł], extra: [Dodatkowe informacje]) +/// ``` +/// - config (dictionary): Konfiguracja slajdu. Możesz używać `config-xxx` do +/// ustawienia konfiguracji slajdu. Dla kilku konfiguracji możesz użyć +/// `utils.merge-dicts` do ich połączenia. +/// - extra (string, none): Dodatkowe informacje, które chcesz wyświetlić na stronie tytułowej. +/// -> none +#let title-slide( + config: (:), + extra: none, + ..args, +) = touying-slide-wrapper(self => { + self = utils.merge-dicts( + self, + config, + config-common(freeze-slide-counter: true), + config-page(fill: sgh-green), + ) + let info = self.info + args.named() + let body = { + loc-pl-en(image(bytes(sgh-kwadrat-pl), format: "svg", width: 3cm), image(bytes(sgh-kwadrat-en), format: "svg", width: 3cm)) + set text(fill: self.colors.neutral-lightest) + set std.align(horizon) + block( + width: 100%, + inset: 0.8em, + { + components.left-and-right( + { + text(size: 1.5em, text(weight: "bold", info.title)) + if info.subtitle != none { + linebreak() + text(size: 1em, info.subtitle) + } + }, + text(2em, utils.call-or-display(self, info.logo)), + ) + set text(size: 1em) + if info.author != none { + block(spacing: 1em, info.author) + } + if info.date != none { + block(spacing: 1em, utils.display-info-date(self)) + } + set text(size: 1em) + if info.institution != none { + block(spacing: 1em, info.institution) + } + if extra != none { + block(spacing: 1em, extra) + } + }, + ) + } + touying-slide(self: self, body) +}) + + +/// Slajd nowego rozdziału dla prezentacji. Możesz go zaktualizować, zmieniając argument `new-section-slide-fn` funkcji `config-common`. +/// +///Przykład: `config-common(new-section-slide-fn: new-section-slide.with(numbered: false))` +/// +/// - config (dictionary): Konfiguracja slajdu. Możesz użyć `config-xxx` do ustawienia konfiguracji slajdu. Dla kilku konfiguracji możesz użyć `utils.merge-dicts` aby je połączyć. +/// - level (int): Poziom nagłówka. +/// - numbered (boolean): Określa, czy nagłówek jest numerowany. +/// - body (auto): Zawartość rozdziału. Będzie przekazana automatycznie przez touying. +/// -> none +#let new-section-slide(config: (:), level: 1, numbered: true, body) = touying-slide-wrapper(self => { + let slide-body = { + set std.align(horizon) + show: pad.with(20%) + set text(size: 1.5em, weight: "bold", hyphenate: false) + stack( + dir: ttb, + spacing: 1em, + text(self.colors.neutral-darkest, utils.display-current-heading(level: level, numbered: numbered, style: auto)), + block( + height: 2pt, + width: 100%, + spacing: 0pt, + components.progress-bar(height: 2pt, self.colors.primary, self.colors.primary-light), + ), + ) + text(self.colors.neutral-dark, body) + } + self = utils.merge-dicts( + self, + config-page(fill: self.colors.neutral-lightest), + ) + touying-slide(self: self, config: config, slide-body) +}) + +#let focus-slide(config: (:), align: horizon + center, body) = touying-slide-wrapper(self => { + self = utils.merge-dicts( + self, + config-common(freeze-slide-counter: true), + config-page(fill: self.colors.neutral-dark, margin: 1.5em), + ) + set text(fill: self.colors.neutral-lightest, size: 1.5em, weight: "bold") + touying-slide(self: self, config: config, std.align(align, body)) +}) + +/// Parametry motywu prezentacji: +/// - aspect-ratio (string): Współczynnik proporcji slajdów. Domyślnie `16-9`. +/// - align (alignment): Wyrównanie zawartości. Domyślnie `horizon`. +/// - header (content, function): Nagłówek slajdu. Domyślnie `self => utils.display-current-heading(setting: utils.fit-to-width.with(grow: false, 100%), depth: self.slide-level)`. +/// - header-right (content, function): Prawa część nagłówka. +/// - footer (content, function): Stopka slajdu. +/// - footer-right (content, function): Prawa część stopki. Domyślnie `context utils.slide-counter.display() + " / " + utils.last-slide-number`. +/// - footer-progress (boolean): Czy wyświetlać pasek postępu w stopce. Domyślnie `false`. +/// -> none +#let sgh-presentation-theme( + /// Współczynnik proporcji slajdów. Domyślnie `16-9`. -> str + aspect-ratio: "16-9", + /// Wyrównanie zawartości. Domyślnie `horizon`. -> alignment + align: horizon, + /// Nagłówek slajdu. Domyślnie ustawiony na automatyczne dopasowanie tytułu do szerokości slajdu. -> content + header: self => utils.display-current-heading( + setting: utils.fit-to-width.with(grow: false, 100%), + depth: self.slide-level, + ), + /// Dodatkowe informacje po prawej stronie nagłówka. -> content + header-right: none, + /// Stopka slajdu. Domyślnie ustawiona na logo SGH. -> content + footer: image(bytes(sgh-logotyp), format: "svg", height: 1em), + /// Prawa strona stopki slajdu. Domyślnie ustawiona na nr slajdu / liczba slajdów. -> content + footer-right: context utils.slide-counter.display() + " / " + utils.last-slide-number, + /// Widoczność paska postępu na dole slajdu. -> boolean + footer-progress: false, + ..args, + body, +) = { + set text(size: 20pt) + // Fonty prezentacji. W przypadku braku fontu Lato używany jest font domyślny. + show math.equation: set text(font: "New Computer Modern Math") + show text: set text(font: "Lato", fallback: true) + // Referencing + set ref(supplement: none) + show ref: it => { + let el = it.element + if el != none and el.func() == math.equation { + [(#it)] + } else { + it + } + } + // Parametry tekstu + set strong(delta: 200) + set par(justify: true) + show math.equation: it => { + // Wszsytkie przecinki są typu "normal" (bez cienkiej spacji) + show ",": math.class("normal", ",") + // ", " (przecinek + spacja) → wstawia przecinek jako klasę "punctuation" i usuwa spację + // (klasa "punctuation" wstawia cienką spację domyślnie) + show regex(",\\s"): math.class("punctuation", ",") + it + } + // Style level 3 headings + show heading.where(level: 3): set text(fill: sgh-green) + // Markery w listach nienumerowanych + set list( + marker: ( + text(fill: sgh-green, sym.square.filled), + text(weight: "bold", fill: sgh-green, sym.quote.chevron.r.double), + text(weight: "bold", fill: sgh-green, sym.dash.en), + ) + ) + // Formatowanie tabel, pogrubiony nagłówek i naprzemienne cieniowanie wierszy + show table.cell.where(y: 0): set text(weight: "bold", fill: sgh-green) + let frame(stroke) = (x, y) => ( + left: 0pt, + right: 0pt, + top: if y == 0 { stroke + 1.5pt} else if y == 1 { stroke + 1pt} else { 0pt }, + bottom: stroke + 1.5pt, + ) + set table( + fill: (_, y) => if calc.odd(y) { sgh-green.lighten(90%) }, + stroke: frame(sgh-text), + ) + + show: touying-slides.with( + config-page( + paper: "presentation-" + aspect-ratio, + header-ascent: 0%, + footer-descent: 30%, + margin: (top: 3em, bottom: 1.5em, x: 3em), + ), + config-common( + slide-fn: slide, + new-section-slide-fn: new-section-slide, + ), + config-methods( + alert: utils.alert-with-primary-color, + ), + config-colors( + primary: sgh-green, // aktywna część paska postępu, sgh-green + primary-light: rgb("#dddddd"), // tło paska postępu, gray + secondary: sgh-green, // tło, green + neutral-lightest: rgb("#ffffff"), // tło slajdu, białe + neutral-dark: sgh-green, // tło slajdu "końcowego", sgh-green + neutral-darkest: sgh-text, // kolor głównego tesktu, ciemy szaro-zielony + ), + // zapamiętanie zmiennych do przyszłego wykorzystania + config-store( + align: align, + header: header, + header-right: header-right, + footer: footer, + footer-right: footer-right, + footer-progress: footer-progress, + ), + ..args, + ) + + body +} \ No newline at end of file From 73fcf1f55d0b16cf17a373e84b70c61b2469b47c Mon Sep 17 00:00:00 2001 From: Piotr Kuszewski <38344235+piotr-m-kuszewski@users.noreply.github.com> Date: Tue, 30 Jun 2026 14:56:46 +0200 Subject: [PATCH 4/5] [Typship] Add README.md --- .../preview/sgh-presentation/0.1.2/README.md | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 packages/preview/sgh-presentation/0.1.2/README.md diff --git a/packages/preview/sgh-presentation/0.1.2/README.md b/packages/preview/sgh-presentation/0.1.2/README.md new file mode 100644 index 0000000000..033ddb4d51 --- /dev/null +++ b/packages/preview/sgh-presentation/0.1.2/README.md @@ -0,0 +1,69 @@ +# sgh-presentation + +A presentation theme for [Touying](https://typst.app/universe/package/touying) +following the visual identity of the SGH Warsaw School of Economics (Szkoła +Główna Handlowa w Warszawie). The theme is bilingual — the SGH logo switches +between Polish and English depending on the document language (`pl` / `en`). + +The standard font for SGH presentations is Lato (a free font developed in Poland +by Łukasz Dziedzic, available at ). If Lato is not +installed, Typst falls back to a default font. On the Typst web app the font is +already available. + +The full manual, a complete example presentation, and the matching SGH thesis +template are available in the project repository: +. + +![Title slide of the example presentation produced with the theme](thumbnail.png) + +## Usage + +The theme builds on Touying, so import both packages: + +```typst +#import "@preview/touying:0.7.4": * +#import "@preview/sgh-presentation:0.1.2": * + +#set text(lang: "pl") // the SGH logo follows the language: "pl" or "en" + +#show: sgh-presentation-theme.with( + config-info( + title: [Prezentacja], + author: [Ijon Tichy], + date: [Marzec 2026], + ), + // footer: [custom footer], + // footer-progress: true, + // aspect-ratio: "4-3", +) + +#title-slide() + +== A simple slide + +Some text on the slide. + += Section + +== Another slide + +#focus-slide[Wake up!] +``` + +## Available functions + +- `sgh-presentation-theme(...)` — the main theme (used with + `#show: sgh-presentation-theme.with(...)`). Options include `aspect-ratio`, + `align`, `header`, `header-right`, `footer`, `footer-right` and + `footer-progress`. +- `title-slide(...)` — the title slide (SGH logo on the brand background). +- `slide(...)` — a regular content slide. +- `new-section-slide(...)` — a section-divider slide. +- `focus-slide[...]` — a full-bleed slide used to draw attention. + +Slide structure follows Touying conventions: level-1 headings (`=`) start new +sections and level-2 headings (`==`) start new slides. + +## License + +MIT — see the [LICENSE](LICENSE) file. From 972acd0b2635a30304cd6ecd6bdcfe1c389083ed Mon Sep 17 00:00:00 2001 From: Piotr Kuszewski <38344235+piotr-m-kuszewski@users.noreply.github.com> Date: Tue, 30 Jun 2026 14:56:47 +0200 Subject: [PATCH 5/5] [Typship] Add thumbnail.png --- .../sgh-presentation/0.1.2/thumbnail.png | Bin 0 -> 33253 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/preview/sgh-presentation/0.1.2/thumbnail.png diff --git a/packages/preview/sgh-presentation/0.1.2/thumbnail.png b/packages/preview/sgh-presentation/0.1.2/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..583263a59f8ab3c1a8376f60fe4353e45a1ac7a8 GIT binary patch literal 33253 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 literal 0 HcmV?d00001