1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
#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,
author: authors.map(author => content-to-string(author.name)).join(", ", last: " & "),
keywords: keywords,
)
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
}
|