// This is a Typst template for general assembly meetings #let signatures(..signataires) = { grid( columns: (1fr, ) * calc.min(signataires.pos().len(), 4), align: center, ..signataires.pos().map(a => [#a \ #box(height: 100pt, fill: red)]) ) } #let assemblee_generale( background: rgb("f4f1eb"), company-details: none, title: "", margin: 2.1cm, vertical-center-level: 2, numbering: "1 / 1", signataires: (), body ) = { set text(font: "Fira Sans") let page_header = [ #text(size: 9.2pt, company-details) ] // accomodate for page header, can't measure? let real_margin_top = margin + 2cm set page( fill: background, margin: (top: real_margin_top, rest: margin), numbering: numbering, header: page_header, ) show quote: it => { box(it.body, fill: rgb("#ccc"), inset: (x: 5pt, y: 0pt), outset: (x: 0pt, y: 5pt)) } show heading.where(level: 1): set align(center) show link: it => underline( text(it, fill: blue, font: "Fira Mono", weight: "medium", size: 9pt), offset: 1.5pt, evade: false, stroke: 0.8pt, ) let body = [ #set text(size: 11pt, weight: "regular") #set par(spacing: 1.5em, justify: true) #body ] heading(level: 1, title) v(30pt) body if signataires.len() > 0 { signatures(..signataires) } }