From ac415766a86e3358e09a952945dc48824e64f9ac Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Fri, 13 Jun 2025 16:48:23 +0300 Subject: [PATCH] Initial commit --- layout.typ | 189 +++++++++++++++++++++++++++++++++++++++++++++++ main.typ | 7 ++ requirements.typ | 5 ++ 3 files changed, 201 insertions(+) create mode 100644 layout.typ diff --git a/layout.typ b/layout.typ new file mode 100644 index 0000000..c0f8a3f --- /dev/null +++ b/layout.typ @@ -0,0 +1,189 @@ +#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( + title: [], + authors: (), + body, +) = { + set document(author: authors) + + set page( + columns: 2, + margin: ( + left: 10mm, + right: 10mm, + top: 10mm, + bottom: 10mm, + ), + number-align: center, + paper: "a4", + ) + set text( + font: ( + "Times New Roman", + "New Computer Modern", + ), + size: 12pt, + hyphenate: auto, + lang: "lv", + region: "lv", + ) + show raw: set text( + font: ( + "JetBrainsMono NF", + "JetBrains Mono", + "Fira Code", + ), + features: (calt: 0), + ) + + show math.equation: set text(weight: 400) + + // Formatting for regular text + set par(justify: true, leading: 1em) + show heading: set block(spacing: 0.7em) + show heading: set text(size: 14pt) + show heading: set par(justify: false) + + set terms(separator: [ -- ]) + + // Headings + set heading(numbering: "1.1.") + + // 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.where(kind: raw): 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 + in ( + "i-figured-raw", + "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: "pielikumu", + ) + + + // 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. + + + outline(depth: 3, indent: indent, title: text(size: 14pt, "Saturs")) + + body +} diff --git a/main.typ b/main.typ index e69de29..3c3cff0 100644 --- a/main.typ +++ b/main.typ @@ -0,0 +1,7 @@ +#import "@preview/fletcher:0.5.7" as fletcher: diagram, edge, node +#import "@preview/gentle-clues:1.2.0": * +#import "layout.typ": indent-par, project + +#show: project.with(title: [Theory of Algorithms Cheatsheet], authors: ( + "Kristofers Solo", +)) diff --git a/requirements.typ b/requirements.typ index e69de29..5097169 100644 --- a/requirements.typ +++ b/requirements.typ @@ -0,0 +1,5 @@ +#import "@preview/fletcher:0.5.7" +#import "@preview/gentle-clues:1.2.0" +#import "@preview/i-figured:0.2.4" +#import "@preview/tablex:0.0.9" +#import "@preview/headcount:0.1.0"