mirror of
https://github.com/kristoferssolo/Qualification-Thesis.git
synced 2025-10-21 20:10:37 +00:00
327 lines
5.9 KiB
Plaintext
327 lines
5.9 KiB
Plaintext
#import "@preview/i-figured:0.2.4"
|
|
#import "@preview/tablex:0.0.9": tablex
|
|
#import "@preview/headcount:0.1.0": *
|
|
|
|
#let indent = 1cm
|
|
|
|
#let indent-par(
|
|
body,
|
|
) = par(h(indent) + body)
|
|
|
|
|
|
#let project(
|
|
university: "",
|
|
faculty: "",
|
|
thesis_type: "",
|
|
title: [],
|
|
authors: (),
|
|
advisor: "",
|
|
date: "",
|
|
body,
|
|
) = {
|
|
|
|
set document(author: authors)
|
|
|
|
set page(
|
|
margin: (
|
|
left: 30mm,
|
|
right: 20mm,
|
|
top: 20mm,
|
|
bottom: 20mm,
|
|
),
|
|
number-align: center,
|
|
paper: "a4",
|
|
)
|
|
set text(
|
|
font: "Times New Roman",
|
|
size: 12pt,
|
|
hyphenate: auto,
|
|
lang: "lv",
|
|
region: "lv",
|
|
)
|
|
show raw: set text(font: "JetBrainsMono NF")
|
|
|
|
show raw.where(lang: "pintora"): it => pintorita.render(it.text)
|
|
|
|
show math.equation: set text(weight: 400)
|
|
|
|
|
|
// replace `.` with `,`
|
|
show math.equation: it => {
|
|
show regex("\d+\.\d+"): num => {
|
|
show ".": math.class("normal", ",")
|
|
num
|
|
}
|
|
it
|
|
}
|
|
|
|
// Formatting for regular text
|
|
set par(
|
|
justify: true,
|
|
leading: 1.5em,
|
|
first-line-indent: indent,
|
|
spacing: 1.5em,
|
|
)
|
|
show heading: set block(spacing: 1.5em)
|
|
|
|
set terms(separator: [ -- ])
|
|
|
|
// Headings
|
|
set heading(numbering: "1.1.")
|
|
show heading: it => {
|
|
if it.level == 1 {
|
|
pagebreak(weak: true)
|
|
text(
|
|
14pt,
|
|
align(
|
|
center,
|
|
upper(it),
|
|
),
|
|
)
|
|
} else {
|
|
text(12pt, it)
|
|
}
|
|
""
|
|
v(-1cm)
|
|
}
|
|
|
|
/* Title page config start */
|
|
align(
|
|
center,
|
|
upper(
|
|
text(
|
|
size: 16pt,
|
|
[
|
|
#university\
|
|
#faculty
|
|
],
|
|
),
|
|
),
|
|
)
|
|
|
|
v(1fr)
|
|
|
|
align(
|
|
center,
|
|
upper(
|
|
text(
|
|
20pt,
|
|
weight: "bold",
|
|
title,
|
|
),
|
|
),
|
|
)
|
|
|
|
v(0.3fr)
|
|
|
|
align(
|
|
center,
|
|
upper(
|
|
text(
|
|
size: 16pt,
|
|
thesis_type,
|
|
),
|
|
),
|
|
)
|
|
|
|
v(1fr)
|
|
|
|
// Author information
|
|
align(
|
|
right,
|
|
[
|
|
#if authors.len() > 1 {
|
|
text(
|
|
weight: "bold",
|
|
"Darba autori:",
|
|
)
|
|
} else {
|
|
text(
|
|
weight: "bold",
|
|
"Darba autors:",
|
|
)
|
|
}\
|
|
#authors.join("\n")
|
|
|
|
#v(2em)
|
|
|
|
#if advisor != "" {
|
|
text(
|
|
weight: "bold",
|
|
"Darba vadītājs:\n",
|
|
)
|
|
advisor
|
|
}
|
|
],
|
|
)
|
|
|
|
v(0.5fr)
|
|
|
|
align(
|
|
center,
|
|
upper(
|
|
text(date),
|
|
),
|
|
)
|
|
/* Title page config end */
|
|
|
|
// Start page numbering
|
|
set page(
|
|
numbering: "1",
|
|
number-align: center,
|
|
)
|
|
|
|
// WARNING: remove before sending
|
|
outline(title: "TODOs", target: figure.where(kind: "todo"))
|
|
|
|
/* --- Figure/Table config start --- */
|
|
show heading: i-figured.reset-counters
|
|
show figure: i-figured.show-figure.with(numbering: "1.1.")
|
|
set figure(numbering: dependent-numbering("1.1"))
|
|
set figure(placement: none)
|
|
|
|
show figure.where(kind: "i-figured-table"): set block(breakable: true)
|
|
show figure.where(kind: "i-figured-table"): set figure.caption(position: top)
|
|
show figure.where(kind: "attachment"): set figure.caption(position: top)
|
|
|
|
show figure: set par(justify: false) // disable justify for figures (tables)
|
|
show figure.where(kind: table): set par(leading: 1em)
|
|
show figure.where(kind: image): set par(leading: 0.75em)
|
|
show figure.caption: set text(size: 11pt)
|
|
|
|
show figure.caption: it => {
|
|
if it.kind == "i-figured-table" {
|
|
return align(
|
|
end,
|
|
emph(it.counter.display(it.numbering) + " tabula ") + text(
|
|
weight: "bold",
|
|
it.body,
|
|
),
|
|
)
|
|
}
|
|
if it.kind == "i-figured-image" {
|
|
return align(
|
|
start,
|
|
emph(it.counter.display(it.numbering) + " att. ") + text(
|
|
weight: "bold",
|
|
it.body,
|
|
),
|
|
)
|
|
}
|
|
if it.kind == "i-figured-\"attachment\"" {
|
|
return align(
|
|
end,
|
|
it.counter.display() + ". pielikums. " + text(it.body),
|
|
)
|
|
}
|
|
it
|
|
}
|
|
|
|
// disable default reference suppliments
|
|
set ref(supplement: it => { })
|
|
|
|
// Custom show rule for references
|
|
show ref: it => {
|
|
let el = it.element
|
|
|
|
if el == none {
|
|
return it
|
|
}
|
|
|
|
if el.func() == heading {
|
|
return link(
|
|
el.location(),
|
|
numbering(
|
|
el.numbering,
|
|
..counter(heading).at(el.location()),
|
|
) + " " + el.body,
|
|
)
|
|
}
|
|
|
|
if el.func() == figure {
|
|
let kind = el.kind
|
|
|
|
// Map for different kinds of supplements
|
|
let supplement_map = (
|
|
i-figured-table: "tab.",
|
|
i-figured-image: "att.",
|
|
attachment: "pielikums",
|
|
)
|
|
|
|
|
|
// Get the supplement value properly
|
|
let supplement = if type(it.supplement) != function {
|
|
it.supplement
|
|
} else {
|
|
if kind in supplement_map {
|
|
supplement_map.at(kind)
|
|
} else {
|
|
""
|
|
}
|
|
}
|
|
|
|
let number = if kind == "attachment" {
|
|
numbering(
|
|
el.numbering,
|
|
..counter(figure.where(kind: kind)).at(el.location()),
|
|
) + "." // Only add dot for attachments
|
|
} else {
|
|
numbering(
|
|
el.numbering,
|
|
..counter(figure.where(kind: kind)).at(el.location()),
|
|
) // No extra dot for tables and images
|
|
}
|
|
|
|
// Create counter based on the kind
|
|
return link(
|
|
el.location(),
|
|
number + if supplement != "" {
|
|
" " + supplement
|
|
} else {
|
|
""
|
|
},
|
|
)
|
|
}
|
|
|
|
|
|
// Default case for non-figure elements
|
|
it
|
|
}
|
|
/* --- Figure/Table config end --- */
|
|
|
|
set list(marker: (
|
|
[•],
|
|
[--],
|
|
[\*],
|
|
[·],
|
|
))
|
|
set enum(numbering: "1aiA)") // TODO: make the same style as LaTeX: 1. | (a) | i. | A.
|
|
|
|
// Abstract
|
|
include "abstract.typ"
|
|
|
|
/* ToC config start */
|
|
// Uppercase 1st level headings in ToC
|
|
show outline.entry.where(level: 1): it => {
|
|
upper(it)
|
|
}
|
|
|
|
pagebreak()
|
|
outline(
|
|
depth: 3,
|
|
indent: 1cm,
|
|
title: text(
|
|
size: 14pt,
|
|
"SATURS",
|
|
),
|
|
)
|
|
/* ToC config end */
|
|
|
|
|
|
|
|
// show link: set text(fill: blue.darken(20%))
|
|
|
|
// Main body
|
|
body
|
|
}
|