You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
484 lines
12 KiB
Plaintext
484 lines
12 KiB
Plaintext
// Sizes used across the template.
|
|
#let script-size = 9pt
|
|
#let footnote-size = 10pt
|
|
#let small-size = 11pt
|
|
#let normal-size = 12pt
|
|
#let large-size = 14pt
|
|
|
|
// #let heading-factor = 1.41
|
|
#let heading-factor = 1.33
|
|
|
|
#let heading-level-size(level) = normal-size * calc.pow(heading-factor, 4 - level)
|
|
|
|
// #let fact-counter = counter("fact")
|
|
|
|
#let chapter-counter = counter("chapter")
|
|
#let section-counter = counter("section")
|
|
|
|
// This function gets your whole document as its `body` and formats
|
|
// it as an article in the style of the American Mathematical Society.
|
|
#let ams-article(
|
|
// The article's title.
|
|
title: [Paper title],
|
|
page-title: [Paper title],
|
|
// An array of authors. For each author you can specify a name,
|
|
// department, organization, location, and email. Everything but
|
|
// but the name is optional.
|
|
authors: (),
|
|
// Your article's abstract. Can be omitted if you don't have one.
|
|
abstract: none,
|
|
// The article's paper size. Also affects the margins.
|
|
paper-size: "us-letter",
|
|
// The result of a call to the `bibliography` function or `none`.
|
|
bibliography: none,
|
|
// The document's content.
|
|
body,
|
|
) = {
|
|
// Formats the author's names in a list with commas and a
|
|
// final "and".
|
|
let names = authors.map(author => author.name)
|
|
let author-string = if authors.len() == 2 {
|
|
names.join(" and ")
|
|
} else {
|
|
names.join(", ", last: ", and ")
|
|
}
|
|
|
|
// Set document metadata.
|
|
set document(title: title, author: names)
|
|
|
|
// Configure the page.
|
|
set page(
|
|
paper: paper-size,
|
|
// The margins depend on the paper size.
|
|
margin: (
|
|
// left: 3cm,
|
|
// right: 6cm,
|
|
inside: 4cm,
|
|
outside: 4cm,
|
|
x: 4cm,
|
|
y: 4cm,
|
|
// top: 4.5cm,
|
|
// bottom: 3.5cm,
|
|
),
|
|
header-ascent: 1cm,
|
|
header: context {
|
|
let i = counter(page).get().first()
|
|
if i == 1 { return }
|
|
set text(size: script-size)
|
|
align(center, upper(page-title))
|
|
},
|
|
footer-descent: 1cm,
|
|
footer: context {
|
|
let i = counter(page).get().first()
|
|
align(center, [#i])
|
|
},
|
|
)
|
|
|
|
// Configure headings.
|
|
set heading(numbering: "1.")
|
|
show heading: it => {
|
|
// Create the heading numbering.
|
|
let number = if it.numbering != none {
|
|
counter(heading).display(it.numbering)
|
|
h(7pt, weak: true)
|
|
}
|
|
|
|
let heading-size = heading-level-size(it.level)
|
|
|
|
set text(size: heading-size, fill: luma(10%), weight: 600, top-edge: "bounds", bottom-edge: "baseline")
|
|
set par(spacing: 0pt, hanging-indent: 0pt, first-line-indent: 0pt)
|
|
|
|
if it.level == 1 {
|
|
if counter(heading).get() != (0,) {
|
|
pagebreak()
|
|
}
|
|
|
|
stack(
|
|
dir: ttb,
|
|
..(if counter(heading).get() != (0,) {
|
|
(layout(size => v(size.height * 25%)), {
|
|
set text(size: heading-level-size(3))
|
|
[Capitolo ]
|
|
set text(size: heading-level-size(2))
|
|
counter(heading).display("1")
|
|
}, v(heading-size * 0.61),)
|
|
}),
|
|
line(length: 100%),
|
|
v(heading-size * 0.61),
|
|
align(right, it.body),
|
|
v(heading-size * 0.61),
|
|
line(length: 100%),
|
|
)
|
|
} else {
|
|
block({
|
|
number
|
|
it.body
|
|
})
|
|
}
|
|
|
|
v(heading-size, weak: true)
|
|
}
|
|
|
|
// Configure paragraph properties.
|
|
set par(spacing: 1.5em, leading: 0.75em, justify: true)
|
|
|
|
// Custom Theme Settings
|
|
|
|
// * Inter + Fira Math
|
|
// set text(font: "Fira Sans", weight: 400)
|
|
set strong(delta: 200)
|
|
// show math.equation: set text(font: "Fira Math")
|
|
// * EB Garamond + Asana Math
|
|
|
|
set text(font: "EB Garamond", size: normal-size)
|
|
// show math.equation: set text(font: "Stix Two Math")
|
|
show raw: set text(font: "Iosevka")
|
|
|
|
// Configure lists
|
|
set list(spacing: 1.5em, indent: 0.5em, body-indent: 0.5em, marker: [•])
|
|
set enum(spacing: 1.5em, indent: 0.5em, body-indent: 0.5em, numbering: "i.1.a)")
|
|
|
|
// Configure links
|
|
// let link-color = color.mix((blue, 50%), (black, 50%))
|
|
// show link: set text(link-color)
|
|
// show link: it => underline(offset: 1pt, stroke: link-color, it)
|
|
|
|
// Configure equations.
|
|
show math.equation: set block(below: normal-size * 1.5, above: normal-size * 1.5)
|
|
show math.equation: set text(weight: 400)
|
|
|
|
set math.equation(numbering: "(1)", supplement: none)
|
|
|
|
show math.equation: it => {
|
|
if it.block and not it.has("label") [
|
|
#counter(math.equation).update(v => v - 1)
|
|
#math.equation(it.body, block: true, numbering: none)#label("")
|
|
] else {
|
|
it
|
|
}
|
|
}
|
|
|
|
show ref: it => {
|
|
if it.element != none and it.element.func() == math.equation {
|
|
link(it.target)[Eq.~(#it)]
|
|
} else {
|
|
it
|
|
}
|
|
}
|
|
|
|
show raw.where(block: false): it => {
|
|
set text(size: 7.25pt, fill: luma(7%))
|
|
|
|
box(outset: (x: 2pt, y: 3pt), fill: luma(92%), radius: 3pt, it)
|
|
}
|
|
|
|
show raw.where(block: true): it => block(outset: (x: 2pt, y: 3pt), fill: luma(92%), radius: 4pt, inset: 4pt, it)
|
|
|
|
set std.bibliography(style: "ieee", title: none, full: true)
|
|
|
|
set figure(gap: 1em)
|
|
show figure: set block(above: 1.5em, below: 1.5em)
|
|
show figure: it => {
|
|
// Customize the figure's caption.
|
|
show figure.caption: caption => block(inset: (x: 1.4em), {
|
|
set align(left)
|
|
set text(size: 10.5pt)
|
|
smallcaps([Figura])
|
|
if caption.numbering != none {
|
|
[ ]
|
|
numbering(caption.numbering, ..caption.counter.at(it.location()))
|
|
}
|
|
[. ]
|
|
caption.body
|
|
})
|
|
|
|
// We want a bit of space around tables and images.
|
|
show selector.or(table, image): pad.with(x: 2em)
|
|
|
|
// Display the figure's body and caption.
|
|
it
|
|
}
|
|
|
|
// show figure.where(kind: "fact"): it => grid(
|
|
// rows: 2,
|
|
// align: left,
|
|
// block(
|
|
// fill: red.mix((yellow, 33%)).desaturate(20%),
|
|
// inset: 0.5em,
|
|
// {
|
|
// set text(size: 9pt)
|
|
// [*Work in Progress*]
|
|
// },
|
|
// ),
|
|
// block(
|
|
// width: 100%,
|
|
// fill: red.mix((yellow, 33%)).desaturate(40%),
|
|
// inset: (x: 0.25em, y: 0.5em),
|
|
// it,
|
|
// ),
|
|
// )
|
|
|
|
show figure.where(kind: "definition"): it => {
|
|
set align(start)
|
|
|
|
block({
|
|
strong({
|
|
[Definizione]
|
|
|
|
if it.numbering != none {
|
|
[ #(
|
|
..counter(heading).get().slice(0, 1).map(it => str(it)),
|
|
numbering(it.numbering, ..it.counter.at(it.location())),
|
|
).join(".") ]
|
|
}
|
|
|
|
if it.supplement != none {
|
|
[ -- ]
|
|
it.supplement
|
|
}
|
|
|
|
[.]
|
|
})
|
|
[ ]
|
|
it.body
|
|
})
|
|
}
|
|
|
|
show figure.where(kind: "fact"): it => {
|
|
set align(start)
|
|
block({
|
|
strong({
|
|
it.supplement
|
|
if it.numbering != none {
|
|
[ ]
|
|
// current chapter and section
|
|
|
|
[#(
|
|
..counter(heading).get().slice(0, 1).map(it => str(it)),
|
|
numbering(it.numbering, ..it.counter.at(it.location())),
|
|
).join(".")]
|
|
}
|
|
[.]
|
|
})
|
|
it.body
|
|
})
|
|
}
|
|
|
|
show figure.where(kind: "observation"): it => {
|
|
set align(start)
|
|
block({
|
|
strong({
|
|
it.supplement
|
|
if it.numbering != none {
|
|
[ ]
|
|
// current chapter and section
|
|
|
|
[#(
|
|
..counter(heading).get().slice(0, 1).map(it => str(it)),
|
|
numbering(it.numbering, ..it.counter.at(it.location())),
|
|
).join(".")]
|
|
}
|
|
[.]
|
|
})
|
|
[ ]
|
|
it.body
|
|
})
|
|
}
|
|
|
|
show figure.where(kind: "proposition"): it => {
|
|
set align(start)
|
|
block({
|
|
strong({
|
|
it.supplement
|
|
if it.numbering != none {
|
|
[ ]
|
|
// current chapter and section
|
|
|
|
[#(
|
|
..counter(heading).get().slice(0, 1).map(it => str(it)),
|
|
numbering(it.numbering, ..it.counter.at(it.location())),
|
|
).join(".")]
|
|
}
|
|
[.]
|
|
})
|
|
[ ]
|
|
it.body
|
|
})
|
|
}
|
|
|
|
show figure.where(kind: "lemma"): it => {
|
|
set align(start)
|
|
block({
|
|
strong({
|
|
it.supplement
|
|
if it.numbering != none {
|
|
[ ]
|
|
// current chapter and section
|
|
|
|
[#(
|
|
..counter(heading).get().slice(0, 1).map(it => str(it)),
|
|
numbering(it.numbering, ..it.counter.at(it.location())),
|
|
).join(".")]
|
|
}
|
|
[.]
|
|
})
|
|
[ ]
|
|
it.body
|
|
})
|
|
}
|
|
|
|
show figure.where(kind: "theorem"): it => {
|
|
set align(start)
|
|
block({
|
|
strong({
|
|
it.supplement
|
|
if it.numbering != none {
|
|
[ ]
|
|
// current chapter and section
|
|
|
|
[#(
|
|
..counter(heading).get().slice(0, 1).map(it => str(it)),
|
|
numbering(it.numbering, ..it.counter.at(it.location())),
|
|
).join(".")]
|
|
}
|
|
[.]
|
|
})
|
|
[ ]
|
|
it.body
|
|
})
|
|
}
|
|
|
|
show ref: it => {
|
|
if it.element != none {
|
|
let el = it.element
|
|
if el.func() == figure {
|
|
link(el.location(), {
|
|
if it.supplement != auto {
|
|
it.supplement
|
|
} else {
|
|
if el.kind == "definition" {
|
|
[Definizione]
|
|
} else {
|
|
el.supplement
|
|
}
|
|
}
|
|
[ ]
|
|
(
|
|
..counter(heading).at(el.location()).slice(0, 1).map(it => str(it)),
|
|
numbering(el.numbering, ..el.counter.at(el.location())),
|
|
).join(".")
|
|
})
|
|
} else if el.func() == metadata and type(el.value) == array and el.value.at(0) == "marker" {
|
|
link(el.location(), el.value.at(1))
|
|
} else {
|
|
repr(it)
|
|
}
|
|
} else if it.citation != none {
|
|
it
|
|
}
|
|
}
|
|
|
|
// Highlight ref
|
|
// show ref: it => {
|
|
// set text(fill: red.mix(black))
|
|
// box(fill: red.mix(white), outset: (y: 0.5em), it)
|
|
// }
|
|
|
|
// First thesis page
|
|
context {
|
|
set align(center + horizon)
|
|
set text(size: 14pt)
|
|
set page(margin: 0pt, header: none, footer: none)
|
|
|
|
// show text: it => box(stroke: 1pt + red, it)
|
|
// show grid: it => box(stroke: 1pt + red, it)
|
|
|
|
grid(columns: 1, image("assets/unipi.svg", width: 5cm), v(2em), {
|
|
set text(size: 18pt)
|
|
smallcaps[Università di Pisa]
|
|
}, v(1em), {
|
|
line(length: 5.25cm)
|
|
}, v(1em), [
|
|
*Dipartimento di Matematica \ Corso di Laurea Triennale in Matematica*
|
|
], v(6em), {
|
|
[Tesi di Laurea]
|
|
}, v(1em), {
|
|
set text(size: 18pt)
|
|
strong(page-title)
|
|
}, v(15em), {
|
|
block(width: 12cm, grid(columns: (1fr, 1fr), {
|
|
set align(left)
|
|
|
|
[Relatore: \ *Prof. Paolo Lisca*]
|
|
}, {
|
|
set align(right)
|
|
|
|
[Candidato: \ *Antonio De Lucreziis*]
|
|
}))
|
|
}, v(6em), {
|
|
line(length: 6cm)
|
|
}, v(1em), [
|
|
*Anno Accademico 2024/2025*
|
|
])
|
|
|
|
pagebreak()
|
|
}
|
|
|
|
// Display the title and authors.
|
|
// v(35pt, weak: true)
|
|
// align(
|
|
// center,
|
|
// {
|
|
// text(size: 18pt, weight: 600, title)
|
|
// v(25pt, weak: true)
|
|
// smallcaps({
|
|
// text(author-string)
|
|
// })
|
|
// },
|
|
// )
|
|
|
|
grid(rows: (auto, 1fr, 2fr), align: center + horizon, v(2em), {
|
|
if abstract != none {
|
|
pad(x: 2em, grid(columns: 1, {
|
|
set text(size: 16pt)
|
|
|
|
[*Abstract*]
|
|
}, v(1em), {
|
|
set align(start)
|
|
abstract
|
|
}))
|
|
}
|
|
}, {
|
|
set text(size: 16pt)
|
|
[*Indice*]
|
|
|
|
v(0.25em)
|
|
|
|
set text(size: 12pt)
|
|
outline(title: none, depth: 2, indent: 1em)
|
|
})
|
|
|
|
context { counter("fact").update(2) }
|
|
|
|
// Display the article's contents.
|
|
v(29pt, weak: true)
|
|
body
|
|
|
|
// Display the bibliography, if any is given.
|
|
if bibliography != none {
|
|
pagebreak()
|
|
|
|
{
|
|
// colbreak()
|
|
show heading: it => {
|
|
set text(size: heading-level-size(2))
|
|
block(it.body)
|
|
}
|
|
heading(level: 1)[Bibliografia]
|
|
}
|
|
|
|
bibliography
|
|
}
|
|
}
|
|
|