112 lines
3.0 KiB
Typst
112 lines
3.0 KiB
Typst
#import "@preview/cetz:0.5.1"
|
|
|
|
#let time(h,m) = datetime(hour:h, minute: m, second: 0)
|
|
|
|
#let parse_time(s) = {
|
|
let (h, m) = s.match(regex("(\d{2}):(\d{2})")).captures.map(int)
|
|
time(h,m)
|
|
}
|
|
|
|
#let gety(s) = {
|
|
let dt = parse_time(s)
|
|
11-(dt - time(8,0)).hours()
|
|
}
|
|
|
|
#let sans_font = "Fira Sans"
|
|
|
|
|
|
#let titre = "EDT 2026/2027 -- M1 S1"
|
|
|
|
#let data = json(bytes(sys.inputs.data))
|
|
|
|
#let cours = data.cours
|
|
/*
|
|
Un exemple :
|
|
|
|
#let cours = (
|
|
(day: 0, start: "08:15", end: "10:15", name:"Algèbre (CM)", prof:"Jean-Benoît Bost", room: "OA1", color: "#ff80b3"),
|
|
(day: 0, start: "10:30", end: "13:00", name:"Algèbre (TD)", prof:"x", room: "OA1", color: "#ff80b3"),
|
|
(day: 3, start: "14:00", end: "16:00", name:"Algèbre (CM)", prof:"Jean-Benoît Bost", room: "OA1", color: "#ff80b3"),
|
|
(day: 3, start: "16:15", end: "18:45", name:"Algèbre (TD)", prof:"x", room: "OA1", color: "#ff80b3"),
|
|
|
|
(day: 0, start: "14:00", end: "16:00", name:"Analyse (CM)", prof:"Blanche Buet", room: "OA1", color: "#80ffcc"),
|
|
(day: 0, start: "16:15", end: "18:45", name:"Analyse (TD)", prof:"x", room: "OA1", color: "#80ffcc"),
|
|
(day: 2, start: "08:15", end: "10:15", name:"Analyse (CM)", prof:"Blanche Buet", room: "OA1", color: "#80ffcc"),
|
|
(day: 2, start: "10:30", end: "13:00", name:"Analyse (TD)", prof:"x", room: "OA1", color: "#80ffcc"),
|
|
|
|
(day: 1, start: "14:00", end: "16:00", name:"Cryptographie (CM)", prof:"Stéphane Fischler", room: "OA1", color: "#e6b3ff"),
|
|
(day: 4, start: "10:30", end: "12:30", name:"Cryptographie (TP)", prof:"Chimène Fischler", room: "OA1", color: "#e6b3ff")
|
|
)
|
|
*/
|
|
|
|
#set page(
|
|
paper: "a4",
|
|
flipped: true,
|
|
footer: [
|
|
#set align(right)
|
|
#set text(font: sans_font, size: 9pt)
|
|
$copyright$ EDT Valentin Moguérou 2026
|
|
],
|
|
margin: (
|
|
x: 1.5cm,
|
|
top: 1cm,
|
|
bottom: 1cm,
|
|
)
|
|
)
|
|
#set par(justify: true)
|
|
#set text(
|
|
font: "New Computer Modern",
|
|
size: 11pt,
|
|
)
|
|
|
|
#set align(center)
|
|
|
|
#let jours = ("Lundi","Mardi","Mercredi","Jeudi","Vendredi")
|
|
|
|
#align(center, text(titre, size: 15pt, weight: "bold"))
|
|
|
|
#cetz.canvas(
|
|
length: 1.5cm,
|
|
{
|
|
import cetz.draw: *
|
|
|
|
for heure in range(8,20) {
|
|
content((-.5,18.85-heure),
|
|
text([#heure:00], font: sans_font, size: 9pt))
|
|
|
|
line((-0.5,19-heure),(0,19-heure), stroke:1pt)
|
|
|
|
|
|
if calc.even(heure) { line((0,19-heure),(15,19-heure), stroke:0.5pt+gray) }
|
|
|
|
}
|
|
line((0,11),(15,11), stroke:1pt) // 8h
|
|
line((0,0),(15,0), stroke:1pt) // 19h
|
|
|
|
|
|
|
|
|
|
for c in cours {
|
|
content(
|
|
(3*c.day, gety(c.start)+.05),
|
|
(3*(c.day+1), gety(c.end)-.05),
|
|
frame: "rect",
|
|
fill: rgb(c.color),
|
|
stroke: 0.5pt,
|
|
align(center+horizon)[
|
|
*#c.name* \
|
|
#c.prof
|
|
|
|
#set text(size: 9pt, font: sans_font)
|
|
#if c.room != "" [*#c.room*, ]
|
|
#(c.start)--#c.end
|
|
]
|
|
)
|
|
}
|
|
|
|
for jour in range(5) {
|
|
content((3*jour+1.5,11.3), text([#jours.at(jour)], font: sans_font, size: 11pt))
|
|
line((3*jour,11.3),(3*jour,0), stroke:1pt)
|
|
}
|
|
line((15,11.5),(15,0), stroke:1pt)
|
|
}) |