initial commit

This commit is contained in:
Ernesto Martinez Garcia 2025-03-04 16:26:19 +01:00
commit d22744d70f
15 changed files with 863 additions and 0 deletions

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
*.pdf
**/dhat-heap.json
model/

33
1.0.0/README.md Normal file
View file

@ -0,0 +1,33 @@
# Typst ISEC Slides Template
An unofficial ISEC TUGraz Slides template
Author: Ernesto Martínez García <[ecomaikgolf.com](https://ecomaikgolf.com)>
> [!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
## 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)
## Samples
TODO
## License `src/assets/tuglogo.svg`
According to Wikipedia:
> This logo image consists only of simple geometric shapes or text. It does not
> meet the threshold of originality needed for copyright protection, and is
> therefore in the public domain. [...]
https://en.m.wikipedia.org/wiki/File:TU_Graz.svg

View file

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.0"
width="800"
height="400"
id="svg2"
sodipodi:docname="tuglogo.svg"
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="0.74125"
inkscape:cx="400"
inkscape:cy="200.33727"
inkscape:window-width="1920"
inkscape:window-height="1080"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<defs
id="defs4" />
<path
d="M 587.48841,328.23036 C 583.73744,330.20802 579.84328,331.69127 575.8059,332.68009 C 571.76841,333.66892 567.60074,334.16333 563.30287,334.16333 C 553.58695,334.16333 545.88978,331.21804 540.21134,325.32745 C 534.53287,319.43688 531.69365,311.44857 531.69365,301.36251 C 531.69365,291.1635 534.58497,283.13988 540.36762,277.29162 C 546.15025,271.44347 554.06883,268.51937 564.12337,268.51931 C 568.00448,268.51937 571.72283,268.9149 575.27842,269.7059 C 578.83391,270.49702 582.18759,271.66949 585.33945,273.2233 L 585.33945,286.3182 C 582.0834,284.31234 578.84694,282.81497 575.63006,281.8261 C 572.4131,280.83733 569.18966,280.34291 565.95975,280.34286 C 559.96869,280.34291 555.3517,282.15811 552.10875,285.78848 C 548.86576,289.41893 547.24427,294.61027 547.24429,301.36251 C 547.24427,308.05831 548.80715,313.22846 551.93293,316.87297 C 555.05866,320.51752 559.49983,322.33979 565.25646,322.33978 C 566.8193,322.33979 568.27147,322.23384 569.61299,322.02194 C 570.95441,321.81006 572.15913,321.4781 573.22714,321.02605 L 573.22714,308.73634 L 564.04524,308.73634 L 564.04524,297.80273 L 587.48841,297.80273 L 587.48841,328.23036 z M 632.57745,298.39603 C 631.35316,297.77451 630.13541,297.31542 628.92422,297.01873 C 627.71295,296.72212 626.49522,296.57379 625.27099,296.57376 C 621.67635,296.57379 618.90875,297.82395 616.9682,300.32424 C 615.02761,302.82459 614.05732,306.40555 614.05734,311.06714 L 614.05734,332.93436 L 600.06958,332.93436 L 600.06958,285.47064 L 614.05734,285.47064 L 614.05734,293.26825 C 615.85463,290.16055 617.91893,287.89331 620.25025,286.46653 C 622.58151,285.03983 625.37515,284.32647 628.63118,284.32642 C 629.10001,284.32647 629.60795,284.34766 630.15499,284.38999 C 630.70195,284.43242 631.49643,284.52423 632.53837,284.66545 L 632.57745,298.39603 z M 659.22453,311.57568 C 656.30714,311.57571 654.11259,312.11249 652.64091,313.18606 C 651.16918,314.25966 650.43332,315.84179 650.43334,317.93243 C 650.43332,319.8536 651.02591,321.35802 652.21112,322.44572 C 653.39628,323.53344 655.04381,324.0773 657.15372,324.07729 C 659.78453,324.0773 661.99861,323.05316 663.79596,321.00486 C 665.59323,318.95659 666.49188,316.3927 666.49191,313.3132 L 666.49191,311.57568 L 659.22453,311.57568 z M 680.59689,305.85461 L 680.59689,332.93436 L 666.49191,332.93436 L 666.49191,325.89956 C 664.61643,328.78129 662.50654,330.87902 660.16226,332.19274 C 657.81792,333.50646 654.96566,334.16333 651.60549,334.16333 C 647.07313,334.16333 643.39386,332.72953 640.56767,329.86193 C 637.74146,326.99434 636.32836,323.27211 636.32836,318.69524 C 636.32836,313.12958 638.09311,309.04714 641.62261,306.4479 C 645.1521,303.84873 650.6938,302.54913 658.24773,302.5491 L 666.49191,302.5491 L 666.49191,301.36251 C 666.49188,298.96111 665.61927,297.20241 663.87409,296.08641 C 662.12885,294.97048 659.40684,294.4125 655.70805,294.41246 C 652.71252,294.4125 649.92539,294.7374 647.34665,295.38716 C 644.76789,296.037 642.37149,297.0117 640.15741,298.31127 L 640.15741,286.74198 C 643.15293,285.95097 646.16146,285.35061 649.18304,284.94091 C 652.20459,284.5313 655.22614,284.32647 658.24773,284.32642 C 666.14024,284.32647 671.83823,286.01454 675.34171,289.39063 C 678.84512,292.76681 680.59685,298.2548 680.59689,305.85461 L 680.59689,305.85461 z M 691.53705,285.47064 L 729.71034,285.47064 L 729.71034,296.06521 L 706.65789,322.08551 L 729.71034,322.08551 L 729.71034,332.93436 L 690.56025,332.93436 L 690.56025,322.33978 L 713.6127,296.31949 L 691.53705,296.31949 L 691.53705,285.47064 z"
id="text2424"
style="font-size:110.52407074px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold" />
<path
d="M 530.95111,260.14746 L 530.95111,146.35144 L 489.77639,146.35144 L 489.77639,123.18115 L 600.04894,123.18115 L 600.04894,146.35144 L 558.96886,146.35144 L 558.96886,260.14746 L 530.95111,260.14746 z M 618.03331,123.18115 L 646.05104,123.18115 L 646.05104,197.36345 C 646.051,209.13551 646.39807,216.7655 647.09224,220.25346 C 648.29116,225.8592 651.14657,230.35934 655.65848,233.75388 C 660.17029,237.14848 666.33861,238.84576 674.16345,238.84574 C 682.11435,238.84576 688.10913,237.24191 692.14781,234.03417 C 696.18631,230.82649 698.61577,226.88692 699.43621,222.21545 C 700.25645,217.54407 700.66662,209.7895 700.66671,198.95174 L 700.66671,123.18115 L 728.68447,123.18115 L 728.68447,195.12116 C 728.68434,211.56464 727.92711,223.18092 726.41276,229.97003 C 724.89816,236.7592 722.10586,242.48947 718.03583,247.16089 C 713.96557,251.83232 708.52294,255.5539 701.70792,258.3256 C 694.8927,261.09732 685.99519,262.48317 675.01534,262.48318 C 661.76364,262.48317 651.71449,260.97274 644.86786,257.95189 C 638.02115,254.93104 632.61008,251.00704 628.63461,246.17989 C 624.6591,241.35277 622.04032,236.29205 620.77828,230.99774 C 618.94828,223.14978 618.03328,211.56464 618.03331,196.24231 L 618.03331,123.18115 z"
id="text2428"
style="font-size:255.42478943px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial;-inkscape-font-specification:Arial Bold" />
<path
d="M 261.48597,49.44316 L 261.48597,120.65005 L 176.35344,120.65005 L 176.35344,191.88051 L 162.07436,191.88051 L 162.07436,120.65005 L 21.168588,120.65005 L 21.168588,261.55582 L 92.399046,261.55582 L 92.399046,332.78628 L 233.30481,332.78628 L 233.30481,261.55582 L 317.2592,261.55582 L 317.2592,190.34893 L 331.56184,190.34893 L 331.56184,261.55582 L 472.46761,261.55582 L 472.46761,120.65005 L 402.39173,120.65005 L 402.39173,49.44316 L 261.48597,49.44316 z M 740.18857,284.41177 L 740.18857,333.16328 L 788.94007,333.16328 L 788.94007,284.41177 L 740.18857,284.41177 z"
id="rect2432"
style="opacity:0.97000002;fill:#f70146;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.79999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 7.2 KiB

87
1.0.0/src/colors.typ Normal file
View file

@ -0,0 +1,87 @@
// 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],
)
]

34
1.0.0/src/helper.typ Normal file
View file

@ -0,0 +1,34 @@
// --------------------------------------------------------------------------
// Extra helper functions
// Fix for typst #311 "Behavior of first line indentation in paragraphs ..."
// https://github.com/typst/typst/issues/311#issuecomment-2023038611
#let fix-311 = context {
set par.line(numbering: none)
let a = par(box())
a
v(-0.8 * measure(2 * a).width)
}
// Transforms content into string
#let content-to-string(content) = {
if content.has("text") {
content.text
} else if content.has("children") {
content.children.map(content-to-string).join("")
} else if content.has("body") {
content-to-string(content.body)
} else if content == [ ] {
" "
}
}
// partitle simulates \paragraph{title} (more or less)
#let partitle(title: [Title], body) = context [
#block(above: 0.8cm)[
*#title* #h(0.3cm) #body
]
#fix-311
]
//vim:tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab colorcolumn=81

284
1.0.0/src/lib.typ Normal file
View file

@ -0,0 +1,284 @@
#import "@preview/polylux:0.4.0": *
#import "@preview/codly:1.2.0": *
#import "@preview/showybox:2.0.4": showybox
#import "@preview/cheq:0.2.2": *
#import "@preview/fontawesome:0.5.0": *
#import "pages/title.typ": *
#import "pages/outline.typ": *
#import "colors.typ"
#let slides(
title: none,
subtitle: none,
authors: none,
date: none,
footer: none,
progress: true,
extra: none,
body
) = [
#let get-heading(level: 1) = context {
let ah = query(heading.where(level: level).after(here()))
let bh = query(heading.where(level: level).before(here()))
if ah.len() > 0 {
let h = ah.first()
if h.location().page() == here().page() {
h.body
} else {
if bh.len() > 0 {
let h = bh.last()
h.body
}
}
}
}
#show emph: it => {
text(colors.tug, it.body)
}
// --------------------------------------------------------------------------
// Text
#set text(size: 20pt, lang: "en", region: "US", font: "Open Sans")
// --------------------------------------------------------------------------
// Page
#set page(
paper: "presentation-16-9",
margin: (
left: 1.49cm,
right: 1.48cm,
top: 2.6cm,
bottom: 1.6cm,
),
header: [
#set block(width: 100%)
#set text(fill: black)
#grid(columns: (auto, 25%), gutter: 0pt, align: top,
block[
#text(size: 24pt, weight: "semibold", get-heading())
],
block()[
#align(top + right)[
#v(-0.17cm)
#move(dx: 0.27cm)[
#text(size: 13.5pt, weight: "medium")[isec.tugraz.at]
#h(0.1cm)
#box(inset: 0pt, outset: 0pt)[#square(width: 0.3cm, height: 0.3cm, outset: 0pt, inset: 0pt, stroke: none, fill: colors.tug)]
]
]
],
)
],
footer: context [
#let footer-body = [
#set block(height: 100%, width: 100%)
#set text(size: 15pt, fill: rgb("808080"))
#grid(columns: (page.margin.bottom.length - 1.68%, 1.3%, auto, 2.5%),
gutter: 0pt, align: horizon,
block(fill: colors.tug)[
#set align(center + horizon)
#set text(fill: white, size: 12pt)
#toolbox.slide-number
],
block(),
block[
#set align(left + horizon)
#set text(size: 13pt)
#footer
],
block(),
)
]
#let progress-body = [
#set block(height: 2pt, width: 100%)
#toolbox.progress-ratio(ratio => {
grid(
columns: (ratio * 100%, 1fr), gutter: 0pt,
block(fill: colors.tug),
block(fill: colors.tug),
)
})
]
#show: toolbox.full-width-block[
#stack(dir: ttb,
block(height: 100%, footer-body),
if progress { place(float: true, bottom)[#progress-body] }
)
]
],
)
// --------------------------------------------------------------------------
// Enumerate and listing
#let default-map = (
"x": text(fill: colors.tuggreen, fa-square-check()),
" ": text(fill: colors.tuggray, fa-square()),
"+": text(fill: colors.tuggreen, fa-plus-circle()),
"-": text(fill: colors.tug, fa-minus-circle()),
">": text(fill: colors.tugblue, fa-arrow-circle-right()),
)
// TODO not a big fan of doing this one
#show: checklist.with(
marker-map: default-map,
show-list-set-block: (above: 0.7em, below: 0.7em),
radius: 0pt,
)
// TODO improve
#set list(indent: 0.48cm, body-indent: 1.2em, spacing: 0.4cm)
#set list(marker: (
(move(dy: 0.11cm, square(width: 0.4em, height: 0.4em, fill: colors.tug))),
(move(dy: 0.11cm, square(width: 0.4em, height: 0.4em, fill: black))),
(move(dy: 0.11cm, square(width: 0.4em, height: 0.4em, fill: gray))),
))
//#show list.item.where(level: 1): set text(size: 10pt)
#set enum(numbering: n => [
#square(stroke: none, fill: colors.tug)[
#align(center)[
#text(fill: white)[#n]
]
]
])
// --------------------------------------------------------------------------
// Code listings
#show raw.where(block: true): set text(size: 13pt)
#show: codly-init.with()
#codly(
display-name: false,
display-icon: false,
radius: 0pt,
stroke: 1pt + black,
smart-indent: true,
zebra-fill: luma(240),
number-format: (number) => [#text(size: 12pt, fill: gray)[#number]],
number-align: right + horizon,
breakable: true)
// --------------------------------------------------------------------------
// Bibliography
#set bibliography(title: "Bibliography", style: "ieee")
#set cite(style: "alphanumeric")
#show bibliography: set par(spacing: 0.4cm)
#show bibliography: set grid(align: top + left)
#show bibliography: set text(17pt)
#show bibliography: t => {
show grid.cell.where(x: 0): set text(fill: colors.tug)
show grid.cell.where(x: 0): set align(top + left)
show link: set text(fill: colors.tuggray)
t
}
// --------------------------------------------------------------------------
// Page
#show heading.where(level: 1): it => [
#slide[
// Hack to show the slides even if empty
#place(left + top, hide(square(width: 0pt, height: 0pt)))
]
]
#title-slide(title, subtitle, authors, extra)
#counter("logical-slide").update(0)
#set align(horizon)
#body
]
// Standout slides don't count as real slides in the official template
#let standout-slide(body) = [
#set page(footer: none, header: none)
#set align(center)
#set text(size: 28pt)
#move(dy: -2.08cm)[
#body
]
]
#let section-slide(section, subtitle) = [
#set page(footer: none, header: none)
#set align(center)
#slide[
#move(dy: -0.3cm)[
#text(size: 36pt)[#section]
#v(-0.2cm)
#text(size: 20pt)[#subtitle]
]
]
]
#let blank-slide(body) = [
#set page(footer: none, header: none, margin: 0pt)
#set align(center)
#slide[
#body
]
]
#let highlight(color: colors.tug, fill: white, body) = [
#box[
#rect(fill: color, inset: (x: 0.2em, y: 0.4em))[
#set text(fill: fill)
#body
]
]
]
#let comment(body) = [
#set text(fill: colors.tuggray, size: 16pt)
#body
]
#let tblock(title, body, color: colors.tug, color-body: colors.lite) = [
#show emph: it => {
text(weight: "medium", fill: color, it.body)
}
#showybox(
title-style: (
color: white,
sep-thickness: 0pt,
),
frame: (
//inset: 0.4em,
radius: 0pt,
thickness: 0pt,
border-color: color,
title-color: color,
body-color: color-body,
inset: (x: 0.55em, y: 0.65em),
),
above: 0.78em,
below: 0.78em,
title: title,
body
)
]
//vim:tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab colorcolumn=81

View file

@ -0,0 +1,15 @@
#import "@preview/polylux:0.4.0": *
#import "../colors.typ"
#let outline-slide() = [
#slide[
= Outline
#let outline = toolbox.all-sections((sections, _current) => {
enum(..sections)
})
#outline.fields()
#type(outline)
]
]

101
1.0.0/src/pages/title.typ Normal file
View file

@ -0,0 +1,101 @@
#import "@preview/polylux:0.4.0": *
#import "../colors.typ"
#let title-slide(title, subtitle, authors, extra) = [
#let footer-isec = [
#set text(size: 13.3pt, weight: "medium")
#let arrow-icon = [
#move(dy: -0.05cm, dx: -0.05cm,
rotate(45deg,
square(fill: none, size: 0.18cm, stroke: (
"top": colors.tug + 1.35pt,
"bottom": none,
"right": colors.tug + 1.35pt,
"left": none,
))
)
)
]
#v(0.4cm)
#box(arrow-icon) #h(0.1cm) isec.tugraz.at
]
#set page(footer: footer-isec, header: none)
#set block(below: 0pt, above: 0pt)
#slide[
#place(top + right, dy: -1.9cm, dx: 0.78cm,
[
#set align(right)
#set text(size: 12pt, tracking: 3.6pt)
#image("../assets/tuglogo.svg", width: 4.1cm)
#v(0.13cm)
#move(dx: -0.07cm)[
SCIENCE
]
#v(0.65em)
#move(dx: -0.03cm)[
PASSION
]
#v(0.65em)
#move(dx: -0.06cm)[
TECHNOLOGY
]
]
)
#v(0.8cm)
#block(width: 70%)[
#let title = text(size: 40.5pt, weight: "bold")[#title]
#move(dx: 0.04em)[
#grid(columns: (0.195cm, auto), column-gutter: 0.7cm,
context [
#let s = measure(title)
#move(dy: -0.4cm, rect(fill: colors.tug, height: s.height + 0.65cm))
],
title
)
]
]
#v(0.6cm)
#block(width: 70%)[
#text(size: 28.3pt, fill: colors.tug, weight: "bold")[#subtitle]
]
#v(1.48cm)
#block(width: 70%)[
#set text(size: 19pt)
#for author in authors [
#author #h(1.1em)
]
]
#v(0.95cm)
#block(width: 70%)[
#extra
]
]
]

View file

@ -0,0 +1,13 @@
// 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{emg25template,
author = {Ernesto Martínez García},
year = {2025},
month = {1},
title = {{Typst ISEC Master's Thesis Template}},
url = {https://github.com/ecomaikgolf/typst-isec-master-thesis-template},
urldate = {2025-01-01}
} // Update urldate!

116
1.0.0/template/slides.typ Normal file
View file

@ -0,0 +1,116 @@
#import "@local/definitely-not-isec-slides:1.0.0": *
// ----------------------------------------------------------------------------
// Configuration
// ----------------------------------------------------------------------------
#show: slides.with(
title: [ Long Paper Title #linebreak() with One to Three Lines],
subtitle: [ An optional short subtitle ],
authors: ( [*First Author*], [Second Author], [Third Author], ),
date: [ 29th Jan 2025 ],
footer: [ First Author ],
extra: [ SomeConf 2025 ],
progress: false,
)
= List
- First point...
- Second point...
- Subpoint...
- Subpoint...
- Third point...
= List and Figure
#grid(columns: (1fr, 1fr),
[
1. First point...
2. Second point...
3. Third point...
],
[
#rect(width: 95%, height: 60%)
]
)
#standout-slide[Standout slide]
#section-slide([Section Header], [Optional subtitle or figure])
= Blocks
#tblock([Color], color: colors.tugblue)[
Highlighted content: _Emphasis_, a + _b_ = c, _n-dimensional_
]
#tblock([Alert Block])[
Important content: _Alert_, a + _b_ = c
]
#tblock([Example Block], color: colors.tuggreen)[
Example content
]
#block[
#set align(horizon)
#highlight[Highlight (main)]
#highlight(color: colors.tugblue)[Highlight (empth)]
Normal text
#comment[Minor comment]
]
= Color Palette
#v(-1.5cm)
#colors.showcase
= Lists with FontAwesome
Checklist:
- [x] Item 1
- [x] Item 2
- [ ] Item 3
Advantages and Disadvantages:
- [+] Advantage
- [-] Disadvantage
- [>] Conclusion
- this is a test
= Color Scheme for PGFplots: Lines
= Color Scheme for PGFplots: Fill
= Code Listings
Powered by codly:
```cpp
int main() {
std::vector<int> test(50);
}
```
```sh
#!/bin/bash
exit 0
```
= Usable Area
#rect(width: 100%, height: 100%, fill: colors.tugmid)
= Acknowledgements
This is a test@emg25template
#bibliography("bibliography.bib")

BIN
1.0.0/thumbnail.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

17
1.0.0/typst.toml Normal file
View file

@ -0,0 +1,17 @@
[package]
name = "definitely-not-isec-slides"
version = "1.0.0"
entrypoint = "src/lib.typ"
authors = ["Ernesto Martínez <https://ecomaikgolf.com>"]
license = "MIT"
description = "An unofficial ISEC TUGraz slides template"
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"
[template]
path = "template"
entrypoint = "slides.typ"
thumbnail = "thumbnail.png"

18
CITATION.cff Normal file
View file

@ -0,0 +1,18 @@
cff-version: 1.2.0
title: Typst ISEC Slides Template
message: >-
ISEC Typst Slides Template
type: software
authors:
- given-names: Ernesto Martínez García
email: me@ecomaikgolf.com
affiliation: ISEC Graz University of Technology
repository-code: >-
https://github.com/ecomaikgolf/typst-isec-slides-template
keywords:
- typst
- template
- slides
- isec
- iaik
- tugraz

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 Ernesto Martínez García
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.

74
README.md Normal file
View file

@ -0,0 +1,74 @@
# Typst ISEC Slides Template
Quickstart (CLI):
> [!NOTE]
> This is temporary and the template will be upstreamed in Typst Universe so
> that not a single clone is needed
```sh
git clone git@github.com:ecomaikgolf/typst-isec-slides-template.git ~/.local/share/typst/packages/local/definitely-not-isec-slides/
typst init @preview/definitely-not-isec-slides:1.0.0 slides
```
Tested typst version: `0.13.0`.
## Typst
### What's Typst?
A modern typesetting system which has:
- Milisecond incremental (memoized) builds¹
- Subsecond full builds¹
- Multithreaded builds per pagebreak
- Easy rustc-like compiler error messages (and no intermediates!)
- Transparent multiple compiler passes (no more mklatex/makefiles)
- Simple & powerful scripting and syntax
- WebAssembly plugin support (python/js interpreters in your thesis? Sure)
Migrating from LaTeX? Check the [migration guide](https://typst.app/docs/guides/guide-for-latex-users/)
¹: This is obviously not a serious benchmark and depends on the document. But
it's fast trust me
### Quick usage
Start incremental compilations with:
```sh
typst watch slides.typ
```
then open the generated PDF:
```sh
xdg-open slides.typ
```
Now edit `slides.typ` and it will be incrementally built in each save.
Incremental builds are blazingly fast, but regular PDF rendering (on the
viewer) is a bottleneck here.
Use tinymist with neovim's `:TypstPreview` (or VSCode plugin), which uses the
browser to do PDF partial renderings and previews will be even more responsive.
No need for running `typst watch` now. It even has features like cursor sync,
click to jump, etc.
## Design
TODO
## Samples
TODO
## License `src/assets/tuglogo.svg`
According to Wikipedia:
> This logo image consists only of simple geometric shapes or text. It does not
> meet the threshold of originality needed for copyright protection, and is
> therefore in the public domain. [...]
https://en.m.wikipedia.org/wiki/File:TU_Graz.svg