Compare commits

4 Commits

15 changed files with 276 additions and 81 deletions

View File

@@ -26,7 +26,7 @@ configure the whole document and `attachment` helper function. Important argumen
`code` and may include `location` and `email`. `code` and may include `location` and `email`.
- `advisors`: Array of advisor dictionaries with `title` and `name`. - `advisors`: Array of advisor dictionaries with `title` and `name`.
- `reviewer`: Reviewer dictionary with `name`. - `reviewer`: Reviewer dictionary with `name`.
- `thesis-type`: Type of thesis - `"bachelor"`, `"course"`, or `"qualification"`. The documentary page adapts its content based on this value. - `thesis-type`: Type of thesis - `"bachelor"`, `"master"`, `"course"`, or `"qualification"`. The documentary page adapts its content based on this value.
- `date`: `datetime(...)` value for the thesis date. Defaults to `today`. - `date`: `datetime(...)` value for the thesis date. Defaults to `today`.
- `place`: Place string (e.g., `"Rīga"`). - `place`: Place string (e.g., `"Rīga"`).
- `abstract`: A record with `primary` and `secondary` abstracts. Each has - `abstract`: A record with `primary` and `secondary` abstracts. Each has
@@ -48,7 +48,7 @@ function in a show rule. If you want to change an existing project to use this
template, you can add a show rule like this at the top of your file: template, you can add a show rule like this at the top of your file:
```typst ```typst
#import "@preview/solo-lu-df:1.1.0": * #import "@preview/solo-lu-df:1.1.1": *
#show: ludf.with( #show: ludf.with(
title: "Darba Nosaukums", title: "Darba Nosaukums",
@@ -85,9 +85,10 @@ template, you can add a show rule like this at the top of your file:
Ready-to-edit examples for different thesis types are included: Ready-to-edit examples for different thesis types are included:
- **Bachelor thesis**: [`examples/bachelor-thesis/`](https://github.com/kristoferssolo/LU-DF-Typst-Template/tree/main/examples/bachelor-thesis)
- **Course work**: [`examples/course-work/`](https://github.com/kristoferssolo/LU-DF-Typst-Template/tree/main/examples/course-work)
- **Qualification thesis**: [`examples/qualification-thesis/`](https://github.com/kristoferssolo/LU-DF-Typst-Template/tree/main/examples/qualification-thesis) - **Qualification thesis**: [`examples/qualification-thesis/`](https://github.com/kristoferssolo/LU-DF-Typst-Template/tree/main/examples/qualification-thesis)
- **Course work**: [`examples/course-work/`](https://github.com/kristoferssolo/LU-DF-Typst-Template/tree/main/examples/course-work)
- **Bachelor thesis**: [`examples/bachelor-thesis/`](https://github.com/kristoferssolo/LU-DF-Typst-Template/tree/main/examples/bachelor-thesis)
- **Master thesis**: [`examples/master-thesis/`](https://github.com/kristoferssolo/LU-DF-Typst-Template/tree/main/examples/master-thesis)
View the examples on GitHub: <https://github.com/kristoferssolo/LU-DF-Typst-Template/tree/main/examples> View the examples on GitHub: <https://github.com/kristoferssolo/LU-DF-Typst-Template/tree/main/examples>

View File

@@ -7,7 +7,9 @@ typst:
- Haug - Haug
- Martin - Martin
- Typst Projekta Izstrādātāji - Typst Projekta Izstrādātāji
url: {value: "https://typst.app/", date: 2025-01-01} url:
value: "https://typst.app/"
date: 2025-01-01
lvs_68: lvs_68:
type: Book type: Book
title: Programmatūras prasību specifikācijas ceļvedis title: Programmatūras prasību specifikācijas ceļvedis

View File

@@ -1,4 +1,4 @@
#import "@preview/solo-lu-df:1.1.0": * #import "@preview/solo-lu-df:1.1.1": *
#show: ludf.with( #show: ludf.with(
title: "Bakalaura Darba Nosaukums", title: "Bakalaura Darba Nosaukums",

View File

@@ -7,7 +7,9 @@ typst:
- Haug - Haug
- Martin - Martin
- Typst Projekta Izstrādātāji - Typst Projekta Izstrādātāji
url: {value: "https://typst.app/", date: 2025-01-01} url:
value: "https://typst.app/"
date: 2025-01-01
lvs_68: lvs_68:
type: Book type: Book
title: Programmatūras prasību specifikācijas ceļvedis title: Programmatūras prasību specifikācijas ceļvedis

View File

@@ -1,4 +1,4 @@
#import "@preview/solo-lu-df:1.1.0": * #import "@preview/solo-lu-df:1.1.1": *
#show: ludf.with( #show: ludf.with(
title: "Kursa Darba Nosaukums", title: "Kursa Darba Nosaukums",

View File

@@ -0,0 +1,28 @@
Master thesis example (solo-lu-df)
This folder contains a ready-to-edit master thesis example built with
the `solo-lu-df` Typst template:
- `main.typ` — Typst source (the example document).
- `bibliography.yml` — example bibliography entries (create as needed).
## How to edit
Open `examples/master-thesis/main.typ` and modify the `ludf.with(...)`
call to change title, authors, advisors, reviewer, date, place, abstract,
and bibliography. The example demonstrates:
- Title/author/advisor metadata
- Multiple advisors for master thesis
- Reviewer for master thesis
- Primary and secondary abstracts with keywords
## Thesis type
This example uses `thesis-type: "master"` which generates the appropriate
documentary page for master theses (similar to bachelor, but with "maģistra"
instead of "bakalaura" in the footer).
## License
This project is licensed under the MIT-0 License - see the [LICENSE](./../../LICENSE) file for details.

View File

@@ -0,0 +1,28 @@
typst:
type: Web
title: Typst
author:
- Mädje
- Laurenz
- Haug
- Martin
- Typst Projekta Izstrādātāji
url:
value: "https://typst.app/"
date: 2025-01-01
lvs_68:
type: Book
title: Programmatūras prasību specifikācijas ceļvedis
author: Institūcija SIA "Latvijas standarts"
issue: 68
date: 1996-03-27
organization: Latvijas Nacionālais standartizācijas un metroloģijas centrs
page-total: 22
lvs_72:
type: Book
title: Ieteicamā prakse programmatūras projektējuma aprakstīšanai
author: Institūcija SIA "Latvijas standarts"
issue: 72
date: 1996-03-27
organization: Latvijas Nacionālais standartizācijas un metroloģijas centrs
page-total: 13

View File

@@ -0,0 +1,113 @@
#import "@preview/solo-lu-df:1.1.1": *
#show: ludf.with(
title: "Maģistra Darba Nosaukums",
thesis-type: "master",
authors: (
(
name: "Jānis Bērziņš",
code: "jb12345",
location: [Riga, Latvia],
email: "jb12345@edu.lu.lv",
),
),
advisors: (
(
title: "Dr. phys.",
name: "Ivars Ozoliņš",
),
(
title: "Mg. dat.",
name: "Anna Zariņa",
),
),
reviewer: (
title: "Prof. Dr. Phys.",
name: "Anna Liepa",
),
date: datetime(
year: 2025,
month: 6,
day: 15,
),
place: "Rīga",
bibliography: bibliography("bibliography.yml"),
abstract: (
primary: (
text: [
#lorem(50)
#lorem(30)
#lorem(20)
],
keywords: (
"Foo",
"Bar",
"Baz",
),
),
secondary: (
text: [
#lorem(20)
#lorem(30)
#lorem(50)
],
keywords: (
"foo",
"bar",
"baz",
),
),
),
attachments: (
attachment(
caption: "Attachment table",
label: <table-1>,
table(
columns: (1fr, 1fr),
[foo], [bar],
),
),
attachment(
caption: "Another table",
table(
columns: (1fr, 1fr),
[Column 1], [Column 2],
),
),
),
)
= Ievads
#lorem(120)
= Teorētiskais pamatojums
#lorem(100)
== Pamatjēdzieni
#lorem(80)
== Līdzīgie risinājumi
#lorem(60)
= Izstrāde
#lorem(100)
== Arhitektūra
#lorem(80)
== Implementācija
#lorem(60)
= Testēšana
#lorem(80)
= Rezultāti un analīze
#lorem(100)
= Secinājumi
#lorem(40)

View File

@@ -7,7 +7,9 @@ typst:
- Haug - Haug
- Martin - Martin
- Typst Projekta Izstrādātāji - Typst Projekta Izstrādātāji
url: {value: "https://typst.app/", date: 2025-01-01} url:
value: "https://typst.app/"
date: 2025-01-01
lvs_68: lvs_68:
type: Book type: Book
title: Programmatūras prasību specifikācijas ceļvedis title: Programmatūras prasību specifikācijas ceļvedis

View File

@@ -1,5 +1,5 @@
#import "@preview/fletcher:0.5.8" as fletcher: diagram, edge, node #import "@preview/fletcher:0.5.8" as fletcher: diagram, edge, node
#import "@preview/solo-lu-df:1.1.0": * #import "@preview/solo-lu-df:1.1.1": *
#import "utils/diagrams.typ": data-store, dpd-database, dpd-edge, process #import "utils/diagrams.typ": data-store, dpd-database, dpd-edge, process
#import "utils/tables.typ": function-table #import "utils/tables.typ": function-table

View File

@@ -10,19 +10,79 @@
bachelor: ( bachelor: (
label: "Bakalaura darbs", label: "Bakalaura darbs",
intro-suffix: "", intro-suffix: "",
make-footer: (date, presentation-date) => [
Darbs iesniegts Datorikas nodaļā #date \
Pilnvarotā persona: vecākā metodiķe: Ārija Sproģe ~#signature-line()
#v(1fr)
Darbs aizstāvēts bakalaura gala pārbaudījuma komisijas sēdē ~#signature-line() \
#presentation-date prot. Nr. #signature-line(length: 4em) \
Komisijas sekretārs(-e): #signature-line(length: 15em)
],
),
master: (
label: "Maģistra darbs",
intro-suffix: "",
make-footer: (date, presentation-date) => [
Darbs iesniegts Datorikas nodaļā #date \
Pilnvarotā persona: vecākā metodiķe: Ārija Sproģe ~#signature-line()
#v(1fr)
Darbs aizstāvēts maģistra gala pārbaudījuma komisijas sēdē ~#signature-line() \
#presentation-date prot. Nr. #signature-line(length: 4em) \
Komisijas sekretārs(-e): #signature-line(length: 15em)
],
), ),
course: ( course: (
label: "Kursa darbs", label: "Kursa darbs",
intro-suffix: " un/vai recenzentam uzrādītajai darba versijai", intro-suffix: "",
make-footer: (date, _) => [
Darbs iesniegts Datorikas nodaļā #date \
Kursa darbu pārbaudīja komisijas sekretārs (elektronisks paraksts)
],
), ),
qualification: ( qualification: (
label: "Kvalifikācijas darbs", label: "Kvalifikācijas darbs",
intro-suffix: " un/vai recenzentam uzrādītajai darba versijai", intro-suffix: " un/vai recenzentam uzrādītajai darba versijai",
make-footer: (date, _) => [
Darbs iesniegts Datorikas nodaļā #date \
Kvalifikācijas darbu pārbaudījumu komisijas sekretārs (elektronisks paraksts)
],
), ),
) )
#let get-thesis-label(thesis-type) = { #let get-thesis-label(thesis-type) = (
thesis-config.at(thesis-type, default: (label: str(thesis-type))).label thesis-config
.at(thesis-type, default: (
label: str(thesis-type),
))
.label
)
#let get-thesis-config(thesis-type) = {
thesis-config.at(thesis-type, default: (
label: str(thesis-type),
intro-suffix: "",
make-footer: (date, _) => [],
))
}
#let make-author-lines(authors, date) = {
if authors.len() > 1 [Autori:\ ] else [Autors: ]
authors.map(it => [*#it.name, #it.code* ~#signature-line()~ #date]).join(", ")
}
#let make-advisor-lines(advisors, date) = {
if advisors.len() > 0 [
#if advisors.len() > 1 [Vadītāji:\ ] else [Vadītājs:]
#(
advisors
.map(it => [*#it.title #it.name* ~#signature-line()~ #date])
.join("\n")
)
]
} }
#let make-dokumentary( #let make-dokumentary(
@@ -34,75 +94,25 @@
date, date,
presentation-date, presentation-date,
) = { ) = {
let (intro-suffix, footer) = if thesis-type == "bachelor" { let cfg = get-thesis-config(thesis-type)
(
"",
[
Darbs iesniegts Datorikas nodaļā #date \
Pilnvarotā persona: vecākā metodiķe: Ārija Sproģe ~#signature-line()
#v(1fr)
Darbs aizstāvēts bakalaura gala pārbaudījuma komisijas sēdē ~#signature-line() \
#presentation-date prot. Nr. #signature-line(length: 4em) \
Komisijas sekretārs(-e): #signature-line(length: 15em)
],
)
} else if thesis-type == "course" {
(
" un/vai recenzentam uzrādītajai darba versijai",
[
Darbs iesniegts Datorikas nodaļā #date \
Kursa darbu pārbaudīja komisijas sekretārs (elektronisks paraksts)
],
)
} else {
(
" un/vai recenzentam uzrādītajai darba versijai",
[
Darbs iesniegts Datorikas nodaļā #date \
Kvalifikācijas darbu pārbaudījumu komisijas sekretārs (elektronisks paraksts)
],
)
}
let work-label = if thesis-type == "bachelor" {
"Bakalaura darbs"
} else if thesis-type == "course" {
"Kursa darbs"
} else {
"Kvalifikācijas darbs"
}
[ [
#work-label "*#title*" #if thesis-type == "bachelor" [izstrādāts] else [ir izstrādāts] #cfg.label "*#title*" izstrādāts
Latvijas Universitātes Eksakto zinātņu un tehnoloģiju fakultātē. Latvijas Universitātes Eksakto zinātņu un tehnoloģiju fakultātē.
Ar savu parakstu apliecinu, ka darbs izstrādāts patstāvīgi, izmantoti tikai Ar savu parakstu apliecinu, ka darbs izstrādāts patstāvīgi, izmantoti tikai
tajā norādītie informācijas avoti un iesniegtā darba elektroniskā kopija tajā norādītie informācijas avoti un iesniegtā darba elektroniskā kopija
atbilst izdrukai#intro-suffix. atbilst izdrukai#cfg.intro-suffix.
#set par(hanging-indent: 1cm) #set par(hanging-indent: 1cm)
#v(0.2fr) #v(0.2fr)
#if authors.len() > 1 [Autori:\ ] else [Autors: ] #make-author-lines(authors, date)
#(
authors
.map(it => [*#it.name, #it.code* ~#signature-line()~ #date])
.join(", ")
)
#v(1fr) #v(1fr)
Rekomendēju/nerekomendēju darbu aizstāvēšanai _(nederīgo svītro vadītājs)_\ Rekomendēju/nerekomendēju darbu aizstāvēšanai _(nederīgo svītro vadītājs)_\
#if advisors.len() > 0 [ #make-advisor-lines(advisors, date)
#if advisors.len() > 1 [Vadītāji:\ ] else [Vadītājs:]
#(
advisors
.map(it => [*#it.title #it.name* ~#signature-line()~ #date])
.join("\n")
)
]
#v(1fr) #v(1fr)
@@ -111,7 +121,7 @@
#v(1fr) #v(1fr)
] ]
#footer #(cfg.make-footer)(date, presentation-date)
#v(1fr) #v(1fr)
] ]

View File

@@ -293,18 +293,26 @@
make-attachments(attachment-title, attachments) make-attachments(attachment-title, attachments)
if display-documentary { let title-text = if type(title) == content and "children" in title.fields() {
make-documentary-page(
if type(title) == content {
title title
.fields() .fields()
.values() .children
.at(0) .filter(it => it.func() != linebreak)
.filter(it => it.func() != linebreak and it != [ ]) .fold((), (acc, it) => {
.join(" ") if it == [ ] and acc.last() == [ ] {
acc
} else {
acc + (it,)
}
})
.join("")
} else { } else {
title title
}, }
if display-documentary {
make-documentary-page(
title-text,
authors, authors,
advisors, advisors,
reviewer, reviewer,

View File

@@ -63,6 +63,7 @@
place, place,
logo, logo,
) = { ) = {
set par(justify: false)
align( align(
center, center,
upper( upper(

View File

@@ -1,4 +1,4 @@
#import "@preview/solo-lu-df:1.1.0": * #import "@preview/solo-lu-df:1.1.1": *
#show: ludf.with( #show: ludf.with(
title: "Darba Nosaukums", title: "Darba Nosaukums",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "solo-lu-df" name = "solo-lu-df"
version = "1.1.0" version = "1.1.1"
entrypoint = "src/lib.typ" entrypoint = "src/lib.typ"
authors = ["Kristofers Solo <dev@kristofers.xyz>"] authors = ["Kristofers Solo <dev@kristofers.xyz>"]
license = "MIT-0" license = "MIT-0"