initial commit
This commit is contained in:
commit
d22744d70f
15 changed files with 863 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
*.pdf
|
||||||
|
**/dhat-heap.json
|
||||||
|
model/
|
||||||
33
1.0.0/README.md
Normal file
33
1.0.0/README.md
Normal 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
|
||||||
47
1.0.0/src/assets/tuglogo.svg
Normal file
47
1.0.0/src/assets/tuglogo.svg
Normal 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
87
1.0.0/src/colors.typ
Normal 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
34
1.0.0/src/helper.typ
Normal 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
284
1.0.0/src/lib.typ
Normal 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
|
||||||
15
1.0.0/src/pages/outline.typ
Normal file
15
1.0.0/src/pages/outline.typ
Normal 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
101
1.0.0/src/pages/title.typ
Normal 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
|
||||||
|
]
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
]
|
||||||
13
1.0.0/template/bibliography.bib
Normal file
13
1.0.0/template/bibliography.bib
Normal 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
116
1.0.0/template/slides.typ
Normal 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
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
17
1.0.0/typst.toml
Normal 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
18
CITATION.cff
Normal 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
21
LICENSE
Normal 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
74
README.md
Normal 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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue