ft: add initial presentation template
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
result*
|
||||||
|
*.pdf
|
||||||
39
README.md
Normal file
39
README.md
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Clean Touying Presentation
|
||||||
|
|
||||||
|
This is a presentation template, using the [Touying](https://touying-typ.github.io/docs/intro/) framework.
|
||||||
|
|
||||||
|
The goal was a simple, easy and fast-to-use template, which I can use, without thinking too much about the setup.
|
||||||
|
In the end, it's just:
|
||||||
|
- setting some colors for the Metropolis theme
|
||||||
|
- setting some styling (font, list marker icon, ...)
|
||||||
|
- enabling speaker notes (using [pympress](https://github.com/Cimbali/pympress))
|
||||||
|
- providing some helper functions to use common environments with default parameters (grids, ...)
|
||||||
|
|
||||||
|
Thanks to touying, we have:
|
||||||
|
- title slides
|
||||||
|
- progression bar
|
||||||
|
- slide numbering
|
||||||
|
- [dynamic slides](https://touying-typ.github.io/docs/category/dynamic-slides)
|
||||||
|
- focus slides
|
||||||
|
- [speaker notes](https://touying-typ.github.io/docs/external/pympress#speaker-notes)
|
||||||
|
- ...
|
||||||
|
|
||||||
|
If you are not using the `pympress` PDF reader, you can disable the speaker notes by commenting out the `show-notes-on-second-screen` line.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
+ Adjust title, author, date and affiliation at the top of the file.
|
||||||
|
+ Optionally adjust the colors, to match affiliation logo color
|
||||||
|
+ Start hacking the presentation after `// PRESENTATION STARTS HERE...`
|
||||||
|
|
||||||
|
Use the provided Nix-flake:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ nix develop .
|
||||||
|
```
|
||||||
|
|
||||||
|
or just the Typst installation on your system:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ typst watch presentation --open
|
||||||
|
```
|
||||||
|
|
||||||
BIN
figures/typst.png
Normal file
BIN
figures/typst.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
82
flake.lock
generated
Normal file
82
flake.lock
generated
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731533236,
|
||||||
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1765186076,
|
||||||
|
"narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"typix": "typix"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"typix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1765097185,
|
||||||
|
"narHash": "sha256-BHXeYveNQxDukwJtj9CefkwbTCxLv9kCDnD8A0lz30k=",
|
||||||
|
"owner": "loqusion",
|
||||||
|
"repo": "typix",
|
||||||
|
"rev": "36cd1360a0a2da94b1525a3340483996aaf867a3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "loqusion",
|
||||||
|
"repo": "typix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
96
flake.nix
Normal file
96
flake.nix
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
description = "A Typst project";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
typix = {
|
||||||
|
url = "github:loqusion/typix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
|
||||||
|
# Example of downloading icons from a non-flake source
|
||||||
|
# font-awesome = {
|
||||||
|
# url = "github:FortAwesome/Font-Awesome";
|
||||||
|
# flake = false;
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = inputs @ {
|
||||||
|
nixpkgs,
|
||||||
|
typix,
|
||||||
|
flake-utils,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
flake-utils.lib.eachDefaultSystem (system: let
|
||||||
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
|
inherit (pkgs) lib;
|
||||||
|
|
||||||
|
typixLib = typix.lib.${system};
|
||||||
|
|
||||||
|
src = typixLib.cleanTypstSource ./.;
|
||||||
|
commonArgs = {
|
||||||
|
typstSource = "main.typ";
|
||||||
|
|
||||||
|
fontPaths = [
|
||||||
|
# Add paths to fonts here
|
||||||
|
# "${pkgs.roboto}/share/fonts/truetype"
|
||||||
|
];
|
||||||
|
|
||||||
|
virtualPaths = [
|
||||||
|
# Add paths that must be locally accessible to typst here
|
||||||
|
# {
|
||||||
|
# dest = "icons";
|
||||||
|
# src = "${inputs.font-awesome}/svgs/regular";
|
||||||
|
# }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Compile a Typst project, *without* copying the result
|
||||||
|
# to the current directory
|
||||||
|
build-drv = typixLib.buildTypstProject (commonArgs
|
||||||
|
// {
|
||||||
|
inherit src;
|
||||||
|
});
|
||||||
|
|
||||||
|
# Compile a Typst project, and then copy the result
|
||||||
|
# to the current directory
|
||||||
|
build-script = typixLib.buildTypstProjectLocal (commonArgs
|
||||||
|
// {
|
||||||
|
inherit src;
|
||||||
|
});
|
||||||
|
|
||||||
|
# Watch a project and recompile on changes
|
||||||
|
watch-script = typixLib.watchTypstProject commonArgs;
|
||||||
|
in {
|
||||||
|
checks = {
|
||||||
|
inherit build-drv build-script watch-script;
|
||||||
|
};
|
||||||
|
|
||||||
|
packages.default = build-drv;
|
||||||
|
|
||||||
|
apps = rec {
|
||||||
|
default = watch;
|
||||||
|
build = flake-utils.lib.mkApp {
|
||||||
|
drv = build-script;
|
||||||
|
};
|
||||||
|
watch = flake-utils.lib.mkApp {
|
||||||
|
drv = watch-script;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
devShells.default = typixLib.devShell {
|
||||||
|
inherit (commonArgs) fontPaths virtualPaths;
|
||||||
|
packages = [
|
||||||
|
# WARNING: Don't run `typst-build` directly, instead use `nix run .#build`
|
||||||
|
# See https://github.com/loqusion/typix/issues/2
|
||||||
|
# build-script
|
||||||
|
watch-script
|
||||||
|
# More packages can be added here, like typstfmt
|
||||||
|
# pkgs.typstfmt
|
||||||
|
];
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
150
presentation.typ
Normal file
150
presentation.typ
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
#import "@preview/touying:0.6.1": *
|
||||||
|
#import themes.metropolis: *
|
||||||
|
|
||||||
|
#let bg = rgb("#fafafa")
|
||||||
|
#let accent = rgb("1a5fdc")
|
||||||
|
#let greytext = rgb("999999")
|
||||||
|
|
||||||
|
#show: metropolis-theme.with(
|
||||||
|
aspect-ratio: "16-9",
|
||||||
|
config-common(show-notes-on-second-screen: right),
|
||||||
|
config-colors(
|
||||||
|
primary: accent, // bold text, footer progress
|
||||||
|
primary-light: bg, // footer progress (left over)
|
||||||
|
secondary: accent, // header
|
||||||
|
neutral-dark: accent, // attention slides
|
||||||
|
neutral-lightest: bg,
|
||||||
|
|
||||||
|
),
|
||||||
|
// footer: self => text(size: 0.8em, []),
|
||||||
|
footer-right: text(size: 0.8em, [#context utils.slide-counter.display()]),
|
||||||
|
config-info(
|
||||||
|
title: [Title],
|
||||||
|
subtitle : [Subtitle],
|
||||||
|
author: "Marco Thomas",
|
||||||
|
date: [DDth MMM, YYYY],
|
||||||
|
institution: [
|
||||||
|
#grid(columns: 2, gutter: 1em,
|
||||||
|
image("figures/typst.png", width: 2em),
|
||||||
|
[Some university],
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
// Styling
|
||||||
|
#set text(font: "Roboto", weight: "light", size: 25pt)
|
||||||
|
#set list(marker: sym.triangle.filled.r)
|
||||||
|
#show figure.caption: c => [
|
||||||
|
#set text(size: 20pt)
|
||||||
|
#c.body
|
||||||
|
]
|
||||||
|
|
||||||
|
// Functions
|
||||||
|
#let note(body) = { text(fill: greytext, [(#body)]) }
|
||||||
|
#let grey(body) = { text(fill: greytext, body) }
|
||||||
|
#let greyoutafter(body) = {
|
||||||
|
alternatives([
|
||||||
|
#body
|
||||||
|
], [
|
||||||
|
#text(fill: greytext, [
|
||||||
|
#body
|
||||||
|
])
|
||||||
|
])
|
||||||
|
}
|
||||||
|
#let ccalign(body) = { align(horizon+center, body) }
|
||||||
|
#let dual(cleft: 50%, cright: 50%, gutter: 1%, calign: left, left, right) = {
|
||||||
|
grid(
|
||||||
|
columns: (cleft, cright),
|
||||||
|
gutter: gutter,
|
||||||
|
align(calign, left),
|
||||||
|
align(calign, right)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
#let triple(cleft: 30%, ccenter: 30%, cright: 30%, gutter: 1%, row-gutter: none, calign: left, left, center, right) = {
|
||||||
|
grid(
|
||||||
|
columns: (cleft, ccenter, cright),
|
||||||
|
gutter: gutter,
|
||||||
|
row-gutter: if row-gutter == none { gutter } else { row-gutter },
|
||||||
|
align(calign, left),
|
||||||
|
align(calign, center),
|
||||||
|
align(calign, right)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PRESENTATION STARTS HERE...
|
||||||
|
#speaker-note()[
|
||||||
|
- some introductory words...
|
||||||
|
]
|
||||||
|
#title-slide()
|
||||||
|
|
||||||
|
= Introduction
|
||||||
|
== Introduction
|
||||||
|
|
||||||
|
|
||||||
|
#ccalign(lorem(20))
|
||||||
|
|
||||||
|
== Grids
|
||||||
|
|
||||||
|
#dual(calign: center,[
|
||||||
|
#image("figures/typst.png", height: 50%)
|
||||||
|
], [
|
||||||
|
this..
|
||||||
|
|
||||||
|
#pause
|
||||||
|
#v(1em)
|
||||||
|
but also this!
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#dual(cleft: 20%, cright: 80%, [
|
||||||
|
Also with adjustable column size
|
||||||
|
], [
|
||||||
|
- one
|
||||||
|
- another
|
||||||
|
- and another
|
||||||
|
])
|
||||||
|
|
||||||
|
#speaker-note()[
|
||||||
|
this is very important
|
||||||
|
|
||||||
|
#text(size: 0.7em, [
|
||||||
|
tip: use text function, if you need more speaker notes
|
||||||
|
])
|
||||||
|
]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#dual(cleft: 65%, [
|
||||||
|
#only((1,2,3))[- Typst]
|
||||||
|
#only((2,3))[- More Typst]
|
||||||
|
#only(3)[- Even more Typst!]
|
||||||
|
], [
|
||||||
|
#only(1)[#image("figures/typst.png", height: 50%)]
|
||||||
|
#only(2)[#image("figures/typst.png", height: 50%)]
|
||||||
|
#only(3)[#image("figures/typst.png", height: 50%)]
|
||||||
|
])
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
// default grids are still usefull to have :)
|
||||||
|
#grid(columns: (33%, 33%, 33%), row-gutter: 20%,
|
||||||
|
only((1,2,3))[#align(center, image("figures/typst.png", width: 60%))],
|
||||||
|
only((2,3))[#align(center, image("figures/typst.png", width: 60%))],
|
||||||
|
only(3)[#align(center, image("figures/typst.png", width: 60%))],
|
||||||
|
only((1,2,3))[#align(center, [Typst!])],
|
||||||
|
only((2,3))[#align(center, [Horizontal!])],
|
||||||
|
only(3)[#align(center, [whoaaa])],
|
||||||
|
)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#greyoutafter([- hello])
|
||||||
|
#greyoutafter([- im more important now!])
|
||||||
|
#greyoutafter([- nah, it's me!])
|
||||||
|
|
||||||
|
#focus-slide()[
|
||||||
|
Important!
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user