From 8f2255db7fd88b6ae8fa08f86c1da1c23b53aaac Mon Sep 17 00:00:00 2001 From: Oschly Date: Tue, 17 Mar 2026 20:45:41 +0100 Subject: [PATCH] Create title page, styles file --- .gitattributes | 2 + .gitignore | 2 + Thesis/Pictures/zut.png | 3 + Thesis/main.pdf | Bin 15575 -> 131 bytes Thesis/main.typ | 15 +- Thesis/style.typ | 374 ++++++++++++++++++++++++++++++++++++++++ Thesis/title-page.typ | 24 --- Thesis/title_page.typ | 68 ++++++++ 8 files changed, 457 insertions(+), 31 deletions(-) create mode 100644 .gitattributes create mode 100644 Thesis/Pictures/zut.png create mode 100644 Thesis/style.typ delete mode 100644 Thesis/title-page.typ create mode 100644 Thesis/title_page.typ diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..a9d620e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +*.pdf filter=lfs diff=lfs merge=lfs -text +Thesis/Pictures/** filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index 74b2665..8724bee 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ xcuserdata/ .build/ .DS_Store +Thesis/title_page.pdf +Thesis/style.pdf diff --git a/Thesis/Pictures/zut.png b/Thesis/Pictures/zut.png new file mode 100644 index 0000000..90168bb --- /dev/null +++ b/Thesis/Pictures/zut.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:935a57483de5063bb7975c02a0670d16e774e03bbba9a47a64a8c118f8a3eefc +size 102672 diff --git a/Thesis/main.pdf b/Thesis/main.pdf index 7e744adb3eb9e2c7c7ff93c7010cf2d5e377706d..7d07f16c31b75b7755f9299d19247f0176585857 100644 GIT binary patch literal 131 zcmWN?K@!3s3;@78uiyg~2n3q`21*cSR63^i;OliSd+}SweCd9khit~&$9a1+S^oD= zS@!ufa`0|0r{<_ydIpRex9D<>fdN)mV(?rs_(ZgNOvnfnN+wH$7MQE|Az=Z?t+qhP N7bWA%+F6G#sUPl`ChGtI literal 15575 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 diff --git a/Thesis/main.typ b/Thesis/main.typ index 02ff8b8..8d6b8af 100644 --- a/Thesis/main.typ +++ b/Thesis/main.typ @@ -1,8 +1,9 @@ -#import "title-page.typ": title-page +#import "style.typ": zut-template, theorem, definition, example -#title-page( - title: "Implementacja aplikacji do współtworzenia notatek z wykorzystaniem technologii peer to peer", - author: "Oskar Marcin Chybowski", - supervisor: "dr inż. Mirosław Mościcki", - year: "2026" -) +#show: zut-template.with(shorttitle: "Krótki tytuł") +#include "title_page.typ" + +#pagebreak() + +#set page(numbering: "1") +#counter(page).update(1) diff --git a/Thesis/style.typ b/Thesis/style.typ new file mode 100644 index 0000000..7efa6ee --- /dev/null +++ b/Thesis/style.typ @@ -0,0 +1,374 @@ +// ========================================================= +// style.typ – Szablon Pracy Dyplomowej +// Wydział Informatyki, ZUT w Szczecinie +// Typst 0.12+ +// ========================================================= +// ╔═══════════════════════════════════════════════════════╗ +// ║ 1. KOLORY ║ +// ╚═══════════════════════════════════════════════════════╝ + +#let blue-wi = cmyk(60%, 20%, 0%, 0%) // blueWI – jasny niebieski WI +#let blue-zut = cmyk(100%, 75%, 0%, 20%) // blueZUT – granatowy ZUT +#let gray-zut = cmyk(0%, 0%, 0%, 40%) // grayZUT – szary ZUT + +// Pochodne (odpowiedniki blueWI!20, blueZUT!60 itp.) +#let blue-wi-20 = blue-wi.lighten(80%) +#let blue-zut-60 = blue-zut.lighten(40%) +#let gray-zut-10 = gray-zut.lighten(90%) + +// Kolory kodu źródłowego +#let code-green = rgb(0, 154, 0) +#let code-gray = rgb(128, 128, 128) +#let code-violet = rgb(148, 0, 211) + +#let theorem(title: none, body) = block( + width: 100%, + fill: luma(97%), + stroke: (top: 1.2pt + blue-zut, bottom: 1.2pt + blue-zut, + left: 1.2pt + blue-zut, right: 1.2pt + blue-zut), + inset: 8pt, + above: 8pt, + below: 8pt, +)[ + #text(size: 10pt, weight: "bold", font: "Fira Sans", fill: blue-zut)[ + Twierdzenie#if title != none [ — #title] + ] + #parbreak() + #body +] + +/// Definicja – lewa kreska 2pt blueZUT (dBox) +#let definition(title: none, body) = block( + width: 100%, + stroke: (left: 2pt + blue-zut), + inset: (left: 10pt, right: 8pt, top: 4pt, bottom: 4pt), + above: 8pt, + below: 8pt, +)[ + #text(size: 10pt, weight: "bold", font: "Fira Sans")[ + Definicja#if title != none [ — #title] + ] + #parbreak() + #body +] + +#let example(title: none, body) = block( + above: 6pt, + below: 6pt, +)[ + #text(size: 10pt, weight: "bold", font: "Fira Sans", fill: blue-zut)[ + Przykład#if title != none [ — #title] + ] + #parbreak() + #body #h(1fr) $blacksquare$ +] + + +// ╔═══════════════════════════════════════════════════════╗ +// ║ 3. GŁÓWNA FUNKCJA SZABLONU ║ +// ╚═══════════════════════════════════════════════════════╝ + +/// Główna funkcja opakowująca dokument. +/// +/// Parametry: +/// shorttitle – krótki tytuł pracy wyświetlany w nagłówku parzystych stron +/// body – treść dokumentu +#let zut-template( + shorttitle: "", + body, +) = { + + // ── 3.1 STRONA ────────────────────────────────────────── + set page( + paper: "a4", + margin: ( + top: 3.2cm, + bottom: 3.5cm, + inside: 3.5cm, // 2.5cm tekst + 1cm bindingoffset + outside: 2.5cm, + ), + + // ── Nagłówek ───────────────────────────────────────── + // Strony nieparzyste (prawe): tytuł rozdziału + numer strony + // Strony parzyste (lewe): numer strony + shorttitle + // Strony otwierające rozdział: nagłówek ukryty (styl "plain") + header: context { + let pg = counter(page).get().first() + let is-odd = calc.odd(pg) + + // Czy ta strona otwiera rozdział? (→ plain style: brak nagłówka) + let chapter-locs = query(heading.where(level: 1)) + let is-chapter-page = chapter-locs.any(h => + counter(page).at(h.location()).first() == pg + ) + + if not is-chapter-page { + // Tytuł bieżącego rozdziału do nagłówka + let prev = query(heading.where(level: 1).before(here())) + let ch-label = if prev.len() > 0 { + let h = prev.last() + let num = counter(heading).at(h.location()) + [#num.first().#h.body] + } else { [] } + + set text(font: "Fira Sans", size: 10pt) + + if is-odd { + // ── Nieparzysta (prawa) ────────────────────────── + grid( + columns: (1fr, auto), + align: horizon, + box( + fill: blue-wi-20, + width: 100%, + inset: (x: 7pt, y: 4pt), + )[#ch-label], + box( + fill: blue-zut, + inset: (x: 7pt, y: 4pt), + )[#text(fill: white, weight: "bold")[#pg]], + ) + } else { + // ── Parzysta (lewa) ────────────────────────────── + grid( + columns: (auto, 1fr), + align: horizon, + box( + fill: blue-zut, + inset: (x: 7pt, y: 4pt), + )[#text(fill: white, weight: "bold")[#pg]], + box( + fill: blue-wi-20, + width: 100%, + inset: (x: 7pt, y: 4pt), + )[#shorttitle], + ) + } + } + }, // /header + + // ── Stopka ─────────────────────────────────────────── + // Widoczna tylko na stronach otwierających rozdział (plain style). + footer: context { + let pg = counter(page).get().first() + let chapter-locs = query(heading.where(level: 1)) + let is-chapter-page = chapter-locs.any(h => + counter(page).at(h.location()).first() == pg + ) + if is-chapter-page { + set text(font: "Fira Sans", size: 10pt) + align(right, + box(fill: blue-zut, inset: (x: 7pt, y: 4pt))[ + #text(fill: white, weight: "bold")[#pg] + ] + ) + } + }, + + numbering: "1", + ) // /set page + + + // ── 3.2 TEKST ─────────────────────────────────────────── + set text(font: "Fira Sans", size: 12pt, lang: "pl") + set par(justify: true, leading: 0.65em) + + + // ── 3.3 LISTY ─────────────────────────────────────────── + // \setlist{nolistsep} → spacing: 0.4em + // \setlist[itemize]{label=--} + set list(marker: [--], spacing: 0.4em, indent: 1em) + set enum(spacing: 0.4em, indent: 1em) + + + // ── 3.4 NAGŁÓWKI ──────────────────────────────────────── + + // Rozdział (\chapter) – level 1 + // {\huge\sffamily\color{blueZUT}} + numer wysuniẹty o \hspace{-3ex} + show heading.where(level: 1): it => { + pagebreak(weak: true) + v(1cm) + context { + set text(size: 24pt, weight: "bold", font: "Fira Sans", fill: blue-zut) + if it.numbering != none { + block(below: 0.6em)[ + // Numer wysuniẹty w lewo (odpowiednik \hspace{-3ex}) + #box(width: 0pt)[ + #place(dx: -2em)[#counter(heading).display().] + ] + #h(1.2em) + #it.body + ] + } else { + block(below: 0.6em)[#it.body] + } + } + } + + // Sekcja (\section) – level 2, wiszący numer w marginesie + // \large\sffamily\bfseries + \llap{\color{blueZUT}{numer}\hspace{1em}} + show heading.where(level: 2): it => { + v(1.5em, weak: true) + context { + block(below: 0.5em, above: 0pt)[ + #set text(size: 13pt, weight: "bold", font: "Fira Sans") + #if it.numbering != none { + // Numer wysuniẹty w lewo (llap) + box(width: 0pt)[ + #place(dx: -3em)[ + #text(fill: blue-zut)[#counter(heading).display()] + ] + ] + } + #it.body + ] + } + v(0.4em, weak: true) + } + + // Podsekcja (\subsection) – level 3 + show heading.where(level: 3): it => { + v(1.2em, weak: true) + context { + block(below: 0.4em, above: 0pt)[ + #set text(size: 12pt, weight: "bold", font: "Fira Sans") + #if it.numbering != none { + box(width: 0pt)[ + #place(dx: -3em)[ + #text(fill: blue-zut)[#counter(heading).display()] + ] + ] + } + #it.body + ] + } + v(0.3em, weak: true) + } + + // Podpodsekcja (\subsubsection) – level 4 + show heading.where(level: 4): it => { + v(1em, weak: true) + context { + block(below: 0.3em, above: 0pt)[ + #set text(size: 11pt, weight: "bold", font: "Fira Sans") + #if it.numbering != none { + box(width: 0pt)[ + #place(dx: -3em)[ + #text(fill: blue-zut)[#counter(heading).display()] + ] + ] + } + #it.body + ] + } + } + + // Paragraf (\paragraph) – level 5, inline + show heading.where(level: 5): it => { + v(0.8em, weak: true) + text(size: 11pt, weight: "bold", font: "Fira Sans")[#it.body] + v(0.15em, weak: true) + } + + + // ── 3.5 SPIS TREŚCI ───────────────────────────────────── + // \titlecontents – numery, wcięcia, kolory, linie kropkowane + + set outline(indent: auto) + + show outline.entry: it => { + if it.level == 1 { + // Rozdział: +12pt przerwy, \large, blueZUT, pogrubiony + v(12pt, weak: true) + text(size: 11pt, weight: "bold", font: "Fira Sans", fill: blue-zut)[ + #h(1.25cm) + #it + ] + } else if it.level == 2 { + // Sekcja: wcięcie 1.25cm, normalny + v(3pt, weak: true) + text(size: 10pt, font: "Fira Sans")[ + #h(1.25cm) + #it + ] + } else if it.level == 3 { + // Podsekcja: wcięcie 2.5cm, small + v(1pt, weak: true) + text(size: 9pt, font: "Fira Sans")[ + #h(2.5cm) + #it + ] + } else { + it + } + } + + + // ── 3.6 BLOKI KODU ────────────────────────────────────── + // Odpowiednik lstdefinestyle{mystyle}: + // • małe litery, font monospace + // • lewa kreska w kolorze blueWI + // • wcięcia x: 5ex + // • numery linii (Typst 0.12+: set raw(numbering: "1")) + + show raw.where(block: true): it => { + block( + width: 100%, + fill: gray-zut.lighten(93%), + stroke: (left: 2pt + blue-wi), + inset: (x: 12pt, y: 9pt), + above: 9pt, + below: 9pt, + radius: (right: 2pt), + )[ + #set text(size: 9.5pt, font: ("Fira Mono", "Courier New", "monospace")) + #it + ] + } + + // Kod inline – dyskretne tło + show raw.where(block: false): it => { + box( + fill: gray-zut.lighten(93%), + inset: (x: 3pt, y: 1pt), + radius: 2pt, + )[ + #set text(size: 10pt, font: ("Fira Mono", "Courier New", "monospace")) + #it + ] + } + + + // ── 3.7 PODPISY RYSUNKÓW I TABEL ──────────────────────── + // \captionsetup[figure]{name={\small\sffamily\color{blueZUT} Rysunek}} + // \captionsetup[table] {name={\small\sffamily\color{blueZUT} Tabela}} + set figure(gap: 0.8em) + + show figure.caption: it => { + set text(size: 9.5pt, font: "Fira Sans") + let kind-label = if it.kind == image { [Rysunek] } + else if it.kind == table { [Tabela] } + else { [Algorytm] } + [ + #text(fill: blue-zut, weight: "bold")[ + #kind-label #it.counter.display() + ]#it.separator#it.body + ] + } + + + // ── 3.8 TABELE ────────────────────────────────────────── + // \usepackage{booktabs} – poziome linie tabel + set table( + stroke: none, + inset: (x: 8pt, y: 5pt), + ) + // Linie nagłówka i dołu tabeli (booktabs-style) + show table.cell.where(y: 0): set text(weight: "bold") + show table: set block(above: 8pt, below: 8pt) + + + // ── Treść dokumentu ───────────────────────────────────── + body + +} // /zut-template diff --git a/Thesis/title-page.typ b/Thesis/title-page.typ deleted file mode 100644 index ce6d843..0000000 --- a/Thesis/title-page.typ +++ /dev/null @@ -1,24 +0,0 @@ -#let title-page( - title: "", - author: "", - supervisor: "", - year: "", - faculty: "Wydział Informatyki", - university: "Zachodniopomorski Uniwersytet Technologiczny w Szczecinie" -) = { - page(footer: none, header: none)[ - #set align(center + horizon) - #university \ - #faculty \ - #v(2cm) - #text(size: 16pt, weight: "bold")[Praca inżynierska] \ - #v(1cm) - #text(size: 14pt, title) \ - #v(3cm) - #author \ - #v(1cm) - Promotor: #supervisor \ - #v(2cm) - Szczecin #year - ] -} diff --git a/Thesis/title_page.typ b/Thesis/title_page.typ new file mode 100644 index 0000000..28ec584 --- /dev/null +++ b/Thesis/title_page.typ @@ -0,0 +1,68 @@ +#let field = "Informatyka" +#let speciality = "Inżynieria Oprogramowania" +#let degreename = "Praca dyplomowa inżynierska" +#let ttitle = "Implementacja aplikacji do współtworzenia notatek z wykorzystaniem technologii peer to peer" +#let ttitle-eng = "Implementation of a collaborative note-taking application using peer-to-peer technology" +#let authornames = "Oskar Chybowski" +#let noalbum = "54941" +#let supname = "dr inż. Mirosław Mościcki" +#let departmentname = "Katedra Inżynierii Oprogramowania" +#let sup-ext = none +#let departmentname-ext = none +#let placesubmit = "Szczecin" +#let yearsubmit = "2026" + +#set page( + paper: "a4", + margin: (x: 2.5cm, y: 2.5cm), + header: none, + footer: none, + numbering: none, +) + +#set text(font: "Fira Sans", size: 12pt, lang: "pl") + + +#align(center)[ + #v(0.6cm) + #image("Pictures/zut.png", width: 40%) + #v(0.75cm) + + Wydział Informatyki \ + #v(0.0cm) + kierunek studiów: #field \ + #v(0.0cm) + specjalność: #speciality + #v(1.25cm) + + // degree + #text(size: 16pt)[#degreename] + #v(1cm) + + // Polish title + #text(size: 16pt, weight: "bold")[#upper(ttitle)] + #v(0.5cm) + + // English title + #text(size: 13pt, weight: "bold")[#upper(ttitle-eng)] + #v(0.5cm) + + // Author + #text(size: 13pt, weight: "bold")[#authornames] + #v(0cm) + + // album number + nr albumu: #text(weight: "bold")[#noalbum] + #v(1cm) + + // Supervisor + #text(size: 13pt)[Opiekun:] + #v(0cm) + #text(size: 13pt, weight: "bold")[#supname] + #v(0cm) + #departmentname + #v(1cm) + + #v(1fr) + #placesubmit, #yearsubmit +]