diff --git a/1.0.0/README.md b/1.0.0/README.md
index ac5aeb0..d59f242 100644
--- a/1.0.0/README.md
+++ b/1.0.0/README.md
@@ -1,26 +1,59 @@
# Typst ISEC Slides Template
-An unofficial ISEC TUGraz Slides template
+> An opinionated version of the ISEC slides template made in Typst. Easily configurable for other institutes or organizations.
Author: Ernesto Martínez García <[ecomaikgolf.com](https://ecomaikgolf.com)>
+Tested typst version: `0.13.1`.
+
> [!NOTE]
-> If you are an ISEC or TUGraz employee and want it renamed to `isec-slides` or
-> `tugraz-slides` I would need an approval to allocate the name :)
-
-## Design
-
-TODO
+> If you are an ISEC or TUGraz employee and think that `isec-thesis` or
+> `tugraz-thesis` fits more, I would need an approval to allocate the name :)
## Contributing
Contribute to the template in the [upstream repository](https://github.com/ecomaikgolf/typst-isec-slides-template)
-Check for [open issues](https://github.com/ecomaikgolf/typst-isec-slides-template)
+Check for [open issues](https://github.com/ecomaikgolf/typst-isec-slides-template/issues)
+
+## Design
+---
+
+
+---
+
+
+---
+
+
+---
+
+
+---
+
+
+---
+
+
+---
+
+
+---
+
+
+---
+
+
+---
+
+
+---
+
+
+---
+
-## Samples
-TODO
## License `src/assets/tuglogo.svg`
diff --git a/1.0.0/example/bibliography.bib b/1.0.0/example/bibliography.bib
deleted file mode 100644
index 2f7d360..0000000
--- a/1.0.0/example/bibliography.bib
+++ /dev/null
@@ -1,13 +0,0 @@
-// You can use LaTeX's bibliography format per default
-// or
-// Typst's Hayagriva:
-// https://github.com/typst/hayagriva/blob/main/docs/file-format.md
-
-@software{Garcia2025Slides,
- author = {Ernesto Martínez García},
- year = {2025},
- month = {8},
- title = {{ISEC Slides Typst Template}},
- url = {https://github.com/ecomaikgolf/typst-isec-slides-template},
- urldate = {2025-08-31}
-}
diff --git a/1.0.0/example/slides.pdfpc b/1.0.0/example/slides.pdfpc
deleted file mode 100644
index fae607b..0000000
--- a/1.0.0/example/slides.pdfpc
+++ /dev/null
@@ -1 +0,0 @@
-{"pdfpcFormat":2,"disableMarkdown":false,"pages":[{"idx":1,"label":"1","overlay":0,"forcedOverlay":false,"hidden":false,"note":"This is a note that only the speaker will see."},{"idx":2,"label":"2","overlay":0,"forcedOverlay":false,"hidden":false,"note":"\n This note will appear on pdfpc's presenter mode. Lets see how long it can be lol\n\n It even supports multiline!\n "},{"idx":3,"label":"3","overlay":0,"forcedOverlay":false,"hidden":false},{"idx":4,"label":"4","overlay":0,"forcedOverlay":false,"hidden":false},{"idx":5,"label":"5","overlay":0,"forcedOverlay":false,"hidden":false}]}
diff --git a/1.0.0/example/slides.typ b/1.0.0/example/slides.typ
deleted file mode 100644
index 5557fec..0000000
--- a/1.0.0/example/slides.typ
+++ /dev/null
@@ -1,103 +0,0 @@
-#import "../src/lib.typ": *
-//#import "@local/definitely-not-isec-slides:1.0.0": *
-
-// ----------------------------------------------------------------------------
-// Configuration
-// ----------------------------------------------------------------------------
-#show: definitely-not-isec-theme.with(
- aspect-ratio: "16-9",
- progress-bar: true,
- config-info(
- title: [Long Paper Title \ with One to Three Lines],
- subtitle: [An optional short subtitle],
- authors: ([*First Author*], [Second Author], [Third Author]),
- extra: [SomeConf 2025],
- footer: [First Author, Second Author, Third Author],
- download-qr: "",
- ),
- config-common(
- handout: false,
- ),
-)
-// -------------------------------[[ CUT HERE ]]--------------------------------
-//
-// #title-slide()
-//
-// #slide(alignment: top, title: [...])
-//
-// #standout-slide()
-// #section-slide()
-// #blank-slide()
-//
-
-// -------------------------------[[ CUT HERE ]]--------------------------------
-
-// ----------------------------------------------------------------------------
-// Slides
-// ----------------------------------------------------------------------------
-
-#show cite: set text(fill: tugcolors.main)
-
-#title-slide()
-
-#slide(alignment: top, title: [First Slide])[
-
- #quote-block(spacing: 0.3em)[
- #lorem(10)
- ]
-
- #lorem(10)
-
- #color-block([Symmetric])[
- This looks much better
- ]
-
- #lorem(10)
-
- #columns(2)[
- #icon-block([Symmetric], "ad-circle")[
- This looks much better
- ]
-
- #color-block([Symmetric])[
- This looks much better
- ]
- ]
-
- #pdfpc.speaker-note("This is a note that only the speaker will see.")
-
-]
-
-#slide(alignment: top, title: [First Slide], outlined: false)[
-
- #quote-block[
- #lorem(20)
- ]
-
- Thus, by using common sense we can deduce that
-
- #note("
- This note will appear on pdfpc's presenter mode. Lets see how long it can be lol
-
- It even supports multiline!
- ")
-]
-
-
-#section-slide(title: [Conclusions], subtitle: [Final Section])
-
-
-#blank-slide[
- A blank canvas for memes
-]
-
-
-#standout-slide(title: [But what if...?])
-
-
-#slide(title: [Bibliography], alignment: top)[
- #bibliography("bibliography.bib")
-]
-
-
-#title-slide()
diff --git a/1.0.0/src/lib.typ b/1.0.0/src/lib.typ
index d30b994..807731e 100644
--- a/1.0.0/src/lib.typ
+++ b/1.0.0/src/lib.typ
@@ -1,7 +1,6 @@
#import "@preview/touying:0.6.1": *
// Project
-#import "tugcolors.typ"
#import "helper.typ": *
#import "logos.typ": *
@@ -14,29 +13,41 @@
// Styling Macro Imports
#import "@preview/showybox:2.0.4": showybox
+// -----------------------------------------------------------------------------
+// General Config
+// -----------------------------------------------------------------------------
+
// Touying bindings for cetz
#let cetz-canvas = touying-reducer.with(
reduce: cetz.canvas,
cover: cetz.draw.hide.with(bounds: true),
)
+
// Touying bindings for fletcher
#let fletcher-diagram = touying-reducer.with(
reduce: fletcher.diagram,
cover: fletcher.hide,
)
-// Macro for notes
-#let note(text) = [
- #pdfpc.speaker-note(text)
-]
-
// -----------------------------------------------------------------------------
// Slide Types
// -----------------------------------------------------------------------------
-//
-// Normal Slide
-//
+/// Normal slide for the presentation, with title (header) and footer
+///
+/// Example:
+///
+/// ```typst
+/// #slide(title: [Slide Title])[
+/// #lorem(20)
+/// ]
+/// ```
+///
+/// - title (content): Title for the slide
+/// - alignment (alignment): Alignment of the contents of the slide
+/// - outlined (boolean): If the slide shows on the PDF ToC
+///
+/// -> content
#let slide(
title: auto,
alignment: none,
@@ -119,9 +130,15 @@
touying-slide(self: self, ..args)
})
-//
-// Title Slide
-//
+/// Title slide for the presentation
+///
+/// Example:
+///
+/// ```typst
+/// #title-slide()
+/// ```
+///
+/// -> content
#let title-slide(..args) = touying-slide-wrapper(self => {
let info = self.info + args.named()
let body = {
@@ -222,19 +239,29 @@
touying-slide(self: self, body)
})
-//
-// Standout Slide
-//
+/// Standout slide for the presentation
+///
+/// Example:
+///
+/// ```typst
+/// #standout-slide(title: [Text])
+/// ```
+///
+/// - title (content): Title for the standout slide
+///
+/// -> content
#let standout-slide(
- title: auto,
+ title: none,
..args,
) = touying-slide-wrapper(self => {
let body = {
set align(center + horizon)
set text(size: 28pt)
- move(dy: -2.08cm)[
- #text(weight: "semibold")[#title]
- ]
+ if title != none {
+ move(dy: -2.08cm)[
+ #text(weight: "semibold")[#title]
+ ]
+ }
}
let self = utils.merge-dicts(self, config-page(
@@ -247,9 +274,18 @@
touying-slide(self: self, body, ..args)
})
-//
-// Section Slide
-//
+/// Section slide for the presentation
+///
+/// Example:
+///
+/// ```typst
+/// #section-slide(title: [Section A], subtitle: [Subtitle])
+/// ```
+///
+/// - title (content): Title for the section
+/// - subtitle (content): Subtitle for the section
+///
+/// -> content
#let section-slide(
title: none,
subtitle: none,
@@ -277,9 +313,17 @@
touying-slide(self: self, body, ..args)
})
-//
-// Blank Slide
-//
+/// Blank slide for free content in the presentation
+///
+/// Example:
+///
+/// ```typst
+/// #blank-slide[
+/// #align(center + horizon)[#lorem(5)]
+/// ]
+/// ```
+///
+/// -> content
#let blank-slide(
..args,
body,
@@ -303,6 +347,43 @@
// Main Function
// -----------------------------------------------------------------------------
+/// Theme cofniguration
+///
+/// Example:
+///
+/// ```typst
+/// #show: definitely-not-isec-theme.with(
+/// aspect-ratio: "16-9",
+/// slide-alignment: top,
+/// config-info(
+/// title: [Long Paper Title \ with One to Three Lines],
+/// subtitle: [An optional short subtitle],
+/// authors: ([*First Author*], [Second Author], [Third Author]),
+/// extra: [SomeConf 2025],
+/// footer: [First Author, Second Author, Third Author],
+/// download-qr: "",
+/// ),
+/// config-common(
+/// handout: false,
+/// ),
+/// config-colors(
+/// ),
+/// )
+/// ```
+///
+/// - aspect-ratio (str): Aspect ratio for the page. See typst documentatin.
+/// - slide-alignemnt (alignment): Default alignment for `#slide()`
+/// - config-info (dict):
+/// - title (content): Title for the presentation
+/// - subtitle (content): Subtitle for the presentation
+/// - authors (array): Arrray of authors (content)
+/// - extra (content): Extra information for the presentation
+/// - footer (content): Footer for each `#slide()`
+/// - download-qr (str): URL to show on `#title-slide()` with a QR
+/// - config-common (dict):
+/// - handout (bool): Boolean for handout mode
+/// - config-colors (dict): Colors for the presentation
+/// - ... see definition of `#definitely-not-isec-theme`
#let definitely-not-isec-theme(
aspect-ratio: "16-9",
header: utils.display-current-heading(level: 1),
@@ -351,7 +432,60 @@
)
}
),
- config-colors(primary: tugcolors.tug, footer: rgb("808080")),
+ config-colors( // Exported from official template
+ tug: rgb("e4154b"),
+ primary: rgb("e4154b"),
+ footer: rgb("808080"),
+ isec: rgb("272733"),
+ foot: rgb("e1e1e1"),
+ web: rgb("0c5a77"),
+ csbme: rgb("19b4e3"),
+ arch: rgb("0a98a2"),
+ bauw: rgb("d68e23"),
+ etec: rgb("68242c"),
+ mach: rgb("3066ba"),
+ chem: rgb("5e60a8"),
+ math: rgb("1e6934"),
+ crypto: rgb("a6c947"),
+ system: rgb("1171a8"),
+ formal: rgb("f7931e"),
+ applied: rgb("7d219e"),
+ page: rgb("e4154b"),
+ fore: rgb("0f0f0f"),
+ back: rgb("ffffff"),
+ dark: rgb("3b5a70"),
+ lite: rgb("eeece1"),
+ head: rgb("245b78"),
+ body: rgb("e2e9ed"),
+ urlA: rgb("0066d8"),
+ urlB: rgb("6c2f91"),
+ colA: rgb("e4154b"),
+ colB: rgb("5191c1"),
+ colC: rgb("a5a5a5"),
+ colD: rgb("285f82"),
+ colE: rgb("78b473"),
+ colF: rgb("e59352"),
+ tugred: rgb("e4154b"),
+ tuggreen: rgb("78b473"),
+ tugblue: rgb("285f82"),
+ tugyellow: rgb("e59352"),
+ tugcyan: rgb("19b4e3"),
+ tugpurple: rgb("7d219e"),
+ tugviolet: rgb("5e60a8"),
+ tugmagenta: rgb("7d219e"),
+ tugturquoise: rgb("0a98a2"),
+ tugbrown: rgb("68242c"),
+ tugblack: rgb("0f0f0f"),
+ tugwhite: rgb("ffffff"),
+ tuggray: rgb("a5a5a5"),
+ tuggrey: rgb("a5a5a5"),
+ tugdark: rgb("3b5a70"),
+ tugmid: rgb("5191c1"),
+ tuglite: rgb("eeece1"),
+ main: rgb("e4154b"),
+ emph: rgb("285f82"),
+ standout: rgb("245b78"),
+ ),
config-methods(
cover: (self: none, body) => hide(body),
init: (
@@ -361,6 +495,7 @@
// TUGraz uses Source Sans Pro, but its a licensed Adobe font
set text(size: 20pt, lang: "en", region: "US", font: font)
show emph: it => { text(self.colors.primary, it.body) }
+ show cite: it => { text(self.colors.primary, it) }
show strong: it => { text(weight: "bold", it.body) }
// Bibliography
@@ -394,12 +529,10 @@
body-indent: 0.6cm
)
-
// Code blocks
show: codly-init.with()
show raw.where(block: true): set text(size: 13pt)
-
// Hotfixes, the messy part
// https://github.com/touying-typ/touying/issues/136
@@ -414,12 +547,42 @@
}
// -----------------------------------------------------------------------------
-// Styling Macros
+// Macros
// -----------------------------------------------------------------------------
+/// Macro for a pdfpc note
+///
+/// Example:
+///
+/// ```typst
+/// #note("This will show on pdfpc speaker notes")
+/// ```
+///
+/// - text (str): Note for pdfpc
+///
+/// -> content
+#let note(text) = [
+ #pdfpc.speaker-note(text)
+]
+
+/// Quote block for phrases. Has a color.primary rectangle in the left
+///
+/// Example:
+///
+/// ```typst
+/// #quote-block[
+/// #lorem(10)
+/// ]
+/// ```
+///
+/// - top-pad (length): Extra height of the quote colored block
+/// - color (color): Color of the quote block
+/// - spacing (length): Spacing after the `#quote-block`
+///
+/// -> content
#let quote-block(
top-pad: 0.55cm,
- color: tugcolors.tug,
+ color: none,
spacing: 0.3cm,
body,
) = [
@@ -432,7 +595,7 @@
row-gutter: 0cm,
[
#rect(
- fill: self.colors.primary,
+ fill: if color == none { self.colors.primary } else { color },
height: s + top-pad,
)
],
@@ -450,14 +613,31 @@
])
]
-// https://tabler.io/icons
-
+/// Block with title and content
+///
+/// Example:
+///
+/// ```typst
+/// #color-block(title: [Advantages])[
+/// - A
+/// - B
+/// - C
+/// ]
+/// ```
+///
+/// - title (content): Title for the color block
+/// - icon (str): Icon to show at the left of the title (Tableau Icons) https://tabler.io/icons
+/// - spacing (length): Spacing before and after the color block
+/// - color (color): Color for the title block
+/// - color-body (color): Color for the background of the body
+///
+/// -> content
#let color-block(
- title,
+ title: [],
icon: none,
spacing: 0.78em,
color: none,
- color-body: tugcolors.lite,
+ color-body: none,
body
) = [
#import "@preview/tableau-icons:0.331.0": *
@@ -477,7 +657,7 @@
thickness: 0pt,
border-color: if color == none { self.colors.primary } else { color },
title-color: if color == none { self.colors.primary } else { color },
- body-color: color-body,
+ body-color: if color-body == none { self.colors.lite } else { color-body },
inset: (x: 0.55em, y: 0.65em),
),
above: spacing,
@@ -494,4 +674,41 @@
])
]
+/// Showcase the colors of the slide
+///
+/// Example:
+///
+/// ```typst
+/// #showcase-colors
+/// ```
+///
+/// -> content
+#let showcase-colors = [
+ #touying-fn-wrapper((self: none) => [
+ #set rect(width: 7.4cm, height: 1.5cm)
+ #set text(fill: white)
+ #set align(center)
+ #grid(columns: 3, rows: 6, column-gutter: 1.8cm, row-gutter: 0.05cm, align: left,
+ rect(fill: self.colors.isec)[isec],
+ rect(fill: self.colors.tug)[tug = main],
+ rect(fill: self.colors.colA)[colA = tugred],
+ rect(fill: self.colors.csbme)[csbme = tugcyan],
+ rect(fill: self.colors.fore)[fore],
+ rect(fill: self.colors.colB)[colB = tugmid],
+ rect(fill: self.colors.crypto)[crypto],
+ rect(fill: self.colors.back)[#text(fill: black)[back]],
+ rect(fill: self.colors.colC)[colC = tuggray],
+ rect(fill: self.colors.system)[system],
+ rect(fill: self.colors.foot)[#text(fill: black)[foot]],
+ rect(fill: self.colors.colD)[colD = tugblue],
+ rect(fill: self.colors.formal)[formal],
+ rect(fill: self.colors.emph)[emph],
+ rect(fill: self.colors.colE)[colE = tuggreen],
+ rect(fill: self.colors.applied)[applied = tugpurple],
+ rect(fill: self.colors.lite)[#text(fill: black)[lite]],
+ rect(fill: self.colors.colF)[colF = tugyellow],
+ )
+ ])
+]
+
//vim:tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab colorcolumn=81
diff --git a/1.0.0/src/tugcolors.typ b/1.0.0/src/tugcolors.typ
deleted file mode 100644
index 6d68a3e..0000000
--- a/1.0.0/src/tugcolors.typ
+++ /dev/null
@@ -1,87 +0,0 @@
-// TUGraz
-#let tug = rgb("e4154b")
-#let isec = rgb("272733")
-#let foot = rgb("e1e1e1")
-#let web = rgb("0c5a77")
-
-// Faculties
-#let csbme = rgb("19b4e3")
-#let arch = rgb("0a98a2")
-#let bauw = rgb("d68e23")
-#let etec = rgb("68242c")
-#let mach = rgb("3066ba")
-#let chem = rgb("5e60a8")
-#let math = rgb("1e6934")
-
-// ISEC research areas
-#let crypto = rgb("a6c947")
-#let system = rgb("1171a8")
-#let formal = rgb("f7931e")
-#let applied = rgb("7d219e")
-
-// Powerpoint palette
-#let page = tug
-#let fore = rgb("0f0f0f")
-#let back = rgb("ffffff")
-#let dark = rgb("3b5a70")
-#let lite = rgb("eeece1")
-#let head = rgb("245b78")
-#let body = rgb("e2e9ed")
-#let urlA = rgb("0066d8")
-#let urlB = rgb("6c2f91")
-#let colA = tug
-#let colB = rgb("5191c1")
-#let colC = rgb("a5a5a5")
-#let colD = rgb("285f82")
-#let colE = rgb("78b473")
-#let colF = rgb("e59352")
-
-
-#let tugred = colA
-#let tuggreen = colE
-#let tugblue = colD
-#let tugyellow = colF
-#let tugcyan = csbme
-#let tugpurple = applied
-#let tugviolet = chem
-#let tugmagenta = tugpurple
-#let tugturquoise = arch
-#let tugbrown = etec
-#let tugblack = fore
-#let tugwhite = back
-#let tuggray = colC
-#let tuggrey = tuggray
-#let tugdark = dark
-#let tugmid = colB
-#let tuglite = lite
-
-#let main = tug
-#let head = isec
-#let emph = colD
-#let standout = head
-
-#let showcase = [
- #set rect(width: 7.4cm, height: 1.5cm)
- #set text(fill: white)
- #set align(center)
- #grid(columns: 3, rows: 6, column-gutter: 1.8cm, row-gutter: 0.05cm, align: left,
- rect(fill: isec)[isec],
- rect(fill: tug)[tug = main],
- rect(fill: colA)[colA = tugred],
- rect(fill: csbme)[csbme = tugcyan],
- rect(fill: fore)[fore],
- rect(fill: colB)[colB = tugmid],
- rect(fill: crypto)[crypto],
- rect(fill: back)[#text(fill: black)[back]],
- rect(fill: colC)[colC = tuggray],
- rect(fill: system)[system],
- rect(fill: foot)[#text(fill: black)[foot]],
- rect(fill: colD)[colD = tugblue],
- rect(fill: formal)[formal],
- rect(fill: emph)[emph],
- rect(fill: colE)[colE = tuggreen],
- rect(fill: applied)[applied = tugpurple],
- rect(fill: lite)[#text(fill: black)[lite]],
- rect(fill: colF)[colF = tugyellow],
- )
-]
diff --git a/1.0.0/template/slides.typ b/1.0.0/template/slides.typ
index 390c151..ac4a959 100644
--- a/1.0.0/template/slides.typ
+++ b/1.0.0/template/slides.typ
@@ -1,5 +1,4 @@
-#import "../src/lib.typ": *
-//#import "@local/definitely-not-isec-slides:1.0.0": *
+#import "@local/definitely-not-isec-slides:1.0.0": *
#show: definitely-not-isec-theme.with(
aspect-ratio: "16-9",
@@ -16,7 +15,6 @@
handout: false,
),
config-colors(
- primary: black,
),
)
@@ -25,85 +23,36 @@
// === Available slides ===
//
// #title-slide()
-// #standout-slide()
-// #section-slide()
+// #standout-slide(title)
+// #section-slide(title,subtitle)
// #blank-slide()
-// #bibliography-slide()
-// #slide()
+// #slide(title)
//
// === Available macros ===
-// #intro-block[]
-// #color-block[]
-// #icon-block[]
//
-// === Integration with pdfpc ===
+// #quote-block(body)
+// #color-block(title, body)
+// #icon-block(title, icon, body)
+//
+// === Presenting with pdfpc ===
//
// Use #note("...") to add pdfpc presenter annotations on a specific slide
// Before presenting, export all notes to a pdfpc file:
// $ typst query slides.typ --field value --one "" > slides.pdfpc
-
+// $ pdfpc slides.pdf
+//
// -------------------------------[[ CUT HERE ]]--------------------------------
#title-slide()
#slide(title: [First Slide])[
#quote-block[
- Important or introductory phrase for the current slide topic.
+ Good luck with your presentation! @emg25template
]
- Continuatory explanation @emg25template over the introductory phrase, leading to:
-
- #v(0.2cm)
- #grid(
- columns: 2,
- column-gutter: 0.6cm,
- color-block([Result A])[
- - Benefit
- - Benefit
- - Downside
- ],
- color-block([Result B])[
- - Benefit
- - Downside
- - Downside
- ],
- )
- #v(0.2cm)
-
- #lorem(10)
-
- #v(0.2cm)
- ```c
- int main() {
- void *p = malloc(0x10);
- }
- ```
+ #note("This will show on pdfpc speaker notes ;)")
]
-#slide(title: [First Slide])[
- #quote-block[
- #lorem(20)
- ]
-
-]
-
-#section-slide(
- title: [Section A],
- subtitle: [Longer Subtitle]
-)
-
-#slide(title: [Second Slide])[
- #rect(fill: gray.lighten(70%), width: 100%, height: 100%)[
- #align(center + horizon)[
- Usable Area
- ]
- ]
-]
-
-= This is a test
-
-test
-
-#slide(title: [Bibliography], alignment: top)[
+#slide(title: [Bibliography])[
#bibliography("bibliography.bib")
]
diff --git a/1.0.0/typst.toml b/1.0.0/typst.toml
index 45177ae..01422e5 100644
--- a/1.0.0/typst.toml
+++ b/1.0.0/typst.toml
@@ -9,7 +9,7 @@ repository = "https://github.com/ecomaikgolf/typst-isec-slides-template"
categories = ["slides"]
disciplines = ["computer-science", "engineering"]
keywords = ["ISEC", "Institute of Information Security", "IAIK", "TUGraz", "Graz University of Technology", "thesis", "template", "Master Thesis"]
-compiler = "0.13.0"
+compiler = "0.13.1"
[template]
path = "template"