#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 == [ ] { " " } } #let conf( title: none, subtitle: none, authors: (), keywords: (), date: none, abstract-title: none, abstract: none, thanks: none, cols: 1, margin: (x: 1.25in, y: 1.25in), paper: "us-letter", lang: "en", region: "US", font: (), fontsize: 11pt, mathfont: none, codefont: none, linestretch: 1, sectionnumbering: none, linkcolor: none, citecolor: none, filecolor: none, pagenumbering: "1", doc, ) = { set document( title: title, keywords: keywords, ) set document( author: authors.map(author => content-to-string(author.name)).join(", ", last: " & "), ) if authors != none and authors != () set page( paper: paper, margin: margin, numbering: pagenumbering, ) set par( justify: true, leading: linestretch * 0.65em ) set text(lang: lang, region: region, font: font, size: fontsize) show math.equation: set text(font: mathfont) if mathfont != none show raw: set text(font: codefont) if codefont != none set heading(numbering: sectionnumbering) show link: set text(fill: rgb(content-to-string(linkcolor))) if linkcolor != none show ref: set text(fill: rgb(content-to-string(citecolor))) if citecolor != none show link: this => { if filecolor != none and type(this.dest) == label { text(this, fill: rgb(content-to-string(filecolor))) } } block(below: 4mm)[ #if title != none { align(center)[#block(inset: 2em)[ #text(weight: "bold", size: 1.5em)[#title #if thanks != none { footnote(thanks, numbering: "*") counter(footnote).update(n => n - 1) }] #( if subtitle != none { parbreak() text(weight: "bold", size: 1.25em)[#subtitle] } ) ]] } #if authors != none and authors != [] { let count = authors.len() let ncols = calc.min(count, 3) grid( columns: (1fr,) * ncols, row-gutter: 1.5em, ..authors.map(author => align(center)[ #author.name \ #author.affiliation \ #author.email ]) ) } #if date != none { align(center)[#block(inset: 1em)[ #date ]] } #if abstract != none { block(inset: 2em)[ #text(weight: "semibold")[#abstract-title] #h(1em) #abstract ] } ] doc }