diff --git a/typstalt/glossary.typ b/typstalt/glossary.typ new file mode 100644 index 0000000..48a0e9e --- /dev/null +++ b/typstalt/glossary.typ @@ -0,0 +1,17 @@ +// this is an example. Check https://typst.app/universe/package/glossarium + +#let glossary = ( + // minimal term + (key: "jku", short: "Johannes Kepler University"), + // a term with a long form + (key: "goat", short: "GOAT", long: "greatest of all time"), + // no long form here + (key: "kdecom", short: "KDE Community", desc:"An international team developing and distributing Open Source software."), + // a full term with description containing markup + ( + key: "oidc", + short: "OIDC", + long: "OpenID Connect", + desc: [OpenID is an open standard and decentralized authentication protocol promoted by the non-profit + #link("https://en.wikipedia.org/wiki/OpenID#OpenID_Foundation")[OpenID Foundation].]), +) diff --git a/typstalt/main.typ b/typstalt/main.typ index d31c4c9..fb913ad 100644 --- a/typstalt/main.typ +++ b/typstalt/main.typ @@ -1,5 +1,103 @@ -#import "@preview/springer-spaniel:0.1.0" -#import springer-spaniel.ctheorems: * // provides "proof", "theorem", "lemma" +#import "@preview/not-jku-thesis:0.1.0": jku-thesis + +#import "utils.typ": inwriting, draft, todo, flex-caption, flex-caption-styles +#import "glossary.typ": glossary +#import "@preview/glossarium:0.2.6": make-glossary, print-glossary, gls, glspl + +#show: make-glossary +#show: flex-caption-styles + + +/** Drafting + + Set the boolean variables `inwriting` and `draft` inside utils.typ. + + The "draft" variable is used to show DRAFT in the header and the title. This should be true until the final version is handed-in. + + The "inwriting" is used to change the appearance of the document for easier writing. Set to true for yourself but false for handing in a draft or so. + +**/ + + +// global text settings +#set text(lang: "en", weight: "regular", font: "Arial", size: 11pt) +#set text(ligatures: false) +#set par(leading: 1em, first-line-indent: 0em, justify: true) +#show par: set block(spacing: 1.5em) // spacing after a paragraph +#show raw: set text( size: 9pt) // set text for code-blocks (``) + +#set page(margin: (left: 2.5cm+1cm, // binding correction of 1cm for single sided printing + right: 2.5cm, + y: 2.9cm), + // margin: (inside: 2.5cm+1cm, // binding correction of 1cm for double sided printing + // outside: 2.5cm, + // y:2.5cm), + // binding: left + ) + +#let date = datetime.today() // not today: datetime(year: 1969, month: 9, day: 6,) +#let k-number = "k12104785" + + +#show: jku-thesis.with( + thesis-type: "Bachelor", + degree: "Bachelor of Science", + program: "Artifical Intelligence Studies", + supervisor: "Professor Scharinger Josef", + advisors: (), // singular advisor like this: ("Dr. Felix Pawsworth",) and no supervisor: "" + department: "Department of Image processing", + author: "Lukas Heiligenbrunner", + date: date, + place-of-submission: "Linz", + title: "Few shot learning for anomaly detection", + abstract-en: [//max. 250 words +#lorem(200) ], + abstract-de: none,// or specify the abbstract_de in a container [] + acknowledgements: [ + + // TODO +I would like to extend a huge thank you to Dr. Felina Whiskers, my primary advisor, for her pawsitive support and expert guidance. Without her wisdom and occasional catnip breaks, this thesis might have turned into a hairball of confusion. + +A special shoutout to Dr. Felix Pawsworth, my co-advisor, for his keen insights and for keeping me from chasing my own tail during this research. Your input was invaluable and much appreciated. + +To the cat owners, survey respondents, and interviewees—thank you for sharing your feline escapades. Your stories made this research more entertaining than a laser pointer. + +Lastly, to my family and friends, thank you for tolerating the endless cat puns and my obsession with feline behavior. Your patience and encouragement kept me from becoming a full-time cat herder. + +To everyone who contributed to this thesis, directly or indirectly, I offer my heartfelt gratitude. You've all made this journey a little less ruff! + + ],//acknowledgements: none // if you are self-made + show-title-in-header: false, + draft: draft, +) + +// set equation and heading numbering +#set math.equation(numbering: "(1)") +#set heading(numbering: "1.1") + + +// Set font size +#show heading.where(level: 3): set text(size: 1.05em) +#show heading.where(level: 4): set text(size: 1.0em) +#show figure: set text(size: 0.9em) + +// Set spacings +#set table(inset: 6.5pt) +#show table: set par(justify: false) +#show figure: it => [#v(1em) #it #v(1em)] + +#show heading.where(level: 1): set block(above: 1.95em, below: 1em) +#show heading.where(level: 2): set block(above: 1.85em, below: 1em) +#show heading.where(level: 3): set block(above: 1.75em, below: 1em) +#show heading.where(level: 4): set block(above: 1.55em, below: 1em) + + +// Pagebreak after level 1 headings +#show heading.where(level: 1): it => [ + #pagebreak(weak: true) + #it +] + // Set citation style #set cite(style: "iso-690-author-date") // page info visible @@ -8,37 +106,9 @@ //#set cite(style: "alphanumeric")// page info not visible -#show: springer-spaniel.template( - title: [Few shot learning for anomaly detection Bachelor Thesis for AI], - authors: ( - ( - name: "Lukas Heiligenbrunner", - institute: "Johannes Kepler University", - address: "Linz, Austria", - email: "lukas.heiligenbrunner@gmail.com" - ), - // ... and so on - ), - abstract: lorem(75), +// Table stroke +#set table(stroke: 0.5pt + black) - // debug: true, // Highlights structural elements and links - // frame: 1pt, // A border around the page for white on white display - // printer-test: true, // Suitably placed CMYK printer tests -) - -#let date = datetime.today() // not today: datetime(year: 1969, month: 9, day: 6,) -#let k-number = "k12345678" - -// set equation and heading numbering -#set math.equation(numbering: "(1)") -#set heading(numbering: "1.1") - - -// Pagebreak after level 1 headings -#show heading.where(level: 1): it => [ - #pagebreak(weak: true) - #it -] // show reference targets in brackets #show ref: it => { @@ -49,6 +119,11 @@ } else [#it] } +// color links and references for the final document +// #show link: set text(fill: blue) +// #show ref: set text(fill: color.olive) + + // style table-of-contents #show outline.entry.where( level: 1 @@ -57,6 +132,30 @@ strong(it) } + +// Draft Settings // +#show cite: set text(fill: purple) if inwriting // highlight citations +#show footnote: set text(fill: purple) if inwriting +#show ref: set text(fill: purple) if inwriting + +// Custom Footer // +#set page(footer: context [ + #text(size:9pt)[ + #table( + stroke: none, + columns: (1fr, auto, 1fr), + align: (left, center, right), + inset: 5pt, + [#date.display("[month repr:long] [day], [year]")],[#k-number],[#counter(page).display( + "1", + )], + + ) + ] +]) + +// ------ Content ------ + // Table of contents. #outline( title: { diff --git a/typstalt/materialandmethods.typ b/typstalt/materialandmethods.typ index 7571cc2..13324f0 100644 --- a/typstalt/materialandmethods.typ +++ b/typstalt/materialandmethods.typ @@ -131,8 +131,3 @@ Equation~$cal(L)(p,q)$~\eqref{eq:crelbinarybatch}\cite{handsonaiI} is the Binary == Alternative Methods There are several alternative methods to few-shot learning which are not used in this bachelor thesis. - -#figure( - image("rsc/diagrams/resnet.svg", width: 80%), - caption: [Testdiagram], -) diff --git a/typstalt/utils.typ b/typstalt/utils.typ new file mode 100644 index 0000000..7436f3e --- /dev/null +++ b/typstalt/utils.typ @@ -0,0 +1,35 @@ +#let inwriting = false +#let draft = false + +#assert(not(inwriting and not(draft)), message: "If inwriting is true, draft should be true as well.") + +#let todo(it) = [ + #if inwriting [ + #text(size: 0.8em)[#emoji.pencil] #text(it, fill: red, weight: 600) + ] +] + +#let silentheading(level, body) = [ + #heading(outlined: false, level: level, numbering: none, bookmarked: true)[#body] +] + +#let in-outline = state("in-outline", false) + +#let flex-caption-styles = rest => { + show outline: it => { + in-outline.update(true) + it + in-outline.update(false) + } + rest +} + +#let flex-caption(long, short) = ( + context ( + if in-outline.get() { + short + } else { + long + } + ) +)