Path: blob/main/src/resources/formats/typst/pandoc/template.typst
12923 views
#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: none,
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,
columns: cols
)
set par(
justify: true,
leading: linestretch * 0.65em
)
set text(lang: lang,
region: region,
size: fontsize)
set text(font: font) if font != none
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)))
} else {
text(this)
}
}
block(below: 1em, width: 100%)[
#if title != none {
align(center, block[
#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
}