#let ovensvg = ``````.text #let hourglasssvg = ``````.text #let timersvg = ``````.text #let knifesvg = ``````.text #let template( title: "", subtitle: none, persons: none, quantity: none, preptime: none, cooktime: none, waittime: none, doc ) = { set page( paper: "a4", numbering: "1", ) set par(justify: true, leading: 0.6em) set text( font: "Libertinus Serif", size: 12pt, ) show heading: set text(font: "Nimbus Sans") align(center, text(32pt, font: "Nimbus Sans")[ #text(title, weight: "medium") \ #if subtitle != none { v(-0.9cm) text(subtitle, size: 18pt) } else { v(-0.5cm) } ]) v(-0.2cm) align(center, { let l = [#v(-0.25em)#line(length: 1.5em, angle: 90deg)] let data = () if persons != none and persons != 0 { data.push([#box([*#persons* pers], baseline: 3.5mm)]) data.push(l) } if quantity != none and quantity != 0 { data.push([#box([*#quantity* pièces], baseline: 3.5mm)]) data.push(l) } if preptime != none and preptime != "" { data.push([#box(image.decode(knifesvg, format: "svg", height: 4.7mm), baseline: 1.2mm) *#preptime*]) data.push(l) } if cooktime != none and cooktime != "" { data.push([#box(image.decode(ovensvg, format: "svg", height: 4.4mm), baseline: 0.9mm) *#cooktime*]) data.push(l) } if waittime != none and waittime != "" { data.push([#box(image.decode(hourglasssvg, format: "svg", height: 4mm), baseline: 0.5mm) *#waittime*]) data.push(l) } if (data.len() > 0) { let _ = data.pop() // remove last separator grid( columns: data.len(), rows: 1, gutter: 3.5mm, ..data ) } }) v(0.5cm) doc } #let step(ingredients, procedure) = { v(2.5mm) context { let space = measure(par(ingredients, leading: 0.8em)).height - 0.75em grid(columns: (1fr, 1fr), par(ingredients, leading: 0.8em), [#v(space)#procedure]) v(2.5mm) } }