Files
ktu-paper/template.typ
T

667 lines
14 KiB
Typst
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Laboratorinio darbo ataskaita
//
#let unnumbered-heading(text) = {
set heading(numbering: none)
[#text]
}
#let bibliography-list(path) = {
bibliography(
path,
title: "Literatūros sąrašas",
full: true
)
}
#let table-list() = {
outline(title: "Lentelių sąrašas", target: figure.where(kind: table))
}
#let picture-list() = {
outline(title: "Paveikslų sąrašas", target: figure.where(kind: image))
}
#let setup-page(body) = {
// Pagal formaliuosius rašto darbų reikalavimus
set page(
// Puslapio matmenys
paper: "a4",
width: 210mm,
height: 297mm,
numbering: none,
number-align: right,
// paraščių dydžiai
margin: (
right: 10mm,
left: 30mm,
bottom: 20mm,
top: 20mm
)
)
// Bendrasis teksto šriftas
set text(
font: "Times New Roman",
size: 12pt,
lang: "lt"
//style: "normal",
//weight: "regular",
//spacing: 200%
)
// TODO: investigate paragraphs
// Tarp eilučių paragrafe
set par(
leading: 1.15em,
justify: true
)
// Tarp paragrafų
show par: set block(spacing: 16pt)
// Nustatom visus paragrafus
// Įvadinei daliai, išvadoms, literatūros sąrašui ir priedams rašto darbo skyrių numeracija netaikoma.
show heading: it => [
#set align(left)
#set text(
font: "Times New Roman",
size: 12pt
)
// Automatically create a pagebreak before level 1 heading
#if it.level == 1 {
pagebreak()
}
// Jei numeracijos nėra, nustatom
#if it.numbering == none {
set align(center)
[#it.body]
// Jei numeracija yra, uždedam
} else {
set align(left)
[#counter(heading).display() #it.body]
}
#v(0.35cm)
]
// Nustatom paveikslėlius ir figūras
set figure.caption(separator: [.])
show figure.caption: it => [
#let supplement = it.supplement
#if it.kind == image {
supplement = "pav"
} else if it.kind == table {
supplement = "lentelė"
} else {
supplement = [NESUKONFIGURUOTA!!! -- #it.kind]
}
*#it.counter.display(it.numbering) #supplement#it.separator* #it.body
]
/*show table: it => [
#it.fields()
//#it
]*/
show table.cell.where(y: 0): it => [
#set align(left)
#set text(size: 10pt)
*#it*
]
show table.cell: it => [
#set align(left)
#set text(size: 10pt)
#it
]
set heading(numbering: "1.")
// Set bibliography and citing style
set bibliography(style: "Assets/iso690-numeric-lt.csl")
body
}
#let lab-report(
title,
subTitles,
type: none,
authors: none,
recipients: none,
recipientRole: none,
authorRole: none,
body
) = {
show: setup-page.with()
// Title page
[
// Top of the title page
#v(20pt)
#align(center)[
#image("Assets/ktu-logo.png", width: 2.46cm, height: 2.69cm)
#v(20pt)*Kauno technologijos universitetas*
#v(0pt)Informatikos fakultetas
#v(83pt)
]
// The title page information
#align(center)[
#text(size: 18pt)[*#title*]
#for subTitle in subTitles {
[
#v(-5pt)
#text(size: 14pt)[#subTitle]
]
}
#v(100pt)
]
// Written by and intended for
// TODO: support multiple authors
#v(15pt)
#align(left)[
#for author in authors {
[
//#v(-5pt)
#h(300pt)*#author*
#parbreak()
]
}
#h(300pt)#authorRole
#v(12pt)
#for recipient in recipients {
[
//#v(-5pt)
#h(300pt)*#recipient*
#parbreak()
]
}
#parbreak()
#h(300pt)#recipientRole
]
// Footer of place where it was written and year
#align(center+bottom)[
*Kaunas, #datetime.today().year()*
]
// Begin numbering from the outline
#set page(
numbering: "1"
)
#outline(
title: "Turinys"
)
#body
]
}
// A template function to create a stylized report
#let ataskaita(
title,
subTitles,
type: none,
authors: none,
recipients: none,
recipientRole: none,
authorRole: none,
body
) = {
// Setup page properties
set page(
paper: "a4",
width: 210mm,
height: 297mm,
numbering: none,
number-align: right,
margin: (
right: 10mm,
left: 30mm,
bottom: 20mm,
top: 20mm
)
)
set par(
leading: 1.15em
)
set par(
leading: 6pt
)
show: all => [
#set text(
font: "Times New Roman",
size: 12pt,
style: "normal",
weight: "regular",
spacing: 200%
)
#all
]
// Nustatom visus paragrafus
show heading: it => [
#set align(left)
#set text(
font: "Times New Roman",
size: 12pt
)
#counter(heading).display() #it.body
#v(0.35cm)
]
show heading.where(numbering: none): it => [
#set align(center)
#set text(
font: "Times New Roman",
size: 12pt
)
#it.body
];
// Setup figures
set figure.caption(separator: [.])
show figure.caption: it => [
#let supplement = it.supplement
#if it.kind == image {
supplement = "pav"
}
#it.counter.display(it.numbering) #supplement#it.separator #it.body
]
set heading(numbering: "1.")
// Set bibliography and citing style
set bibliography(style: "Assets/iso690-numeric-lt.csl")
// Title page
[
// Top of the title page
#v(20pt)
#align(center)[
#image("Assets/ktu-logo.png", width: 2.46cm, height: 2.69cm)
#v(20pt)*Kauno technologijos universitetas*
#v(0pt)Informatikos fakultetas
#v(83pt)
]
// The title page information
#align(center)[
#text(size: 18pt)[*#title*]
#for subTitle in subTitles {
[
#v(-5pt)
#text(size: 14pt)[#subTitle]
]
}
#v(100pt)
]
// Written by and intended for
// TODO: support multiple authors
#v(15pt)
#align(left)[
#for author in authors {
[
//#v(-5pt)
#h(300pt)*#author*
#parbreak()
]
}
#h(300pt)#authorRole
#v(12pt)
#for recipient in recipients {
[
//#v(-5pt)
#h(300pt)*#recipient*
#parbreak()
]
}
#parbreak()
#h(300pt)#recipientRole
]
// Footer of place where it was written and year
#align(center+bottom)[
*Kaunas, #datetime.today().year()*
]
#pagebreak()
// Begin numbering from the outline
#set page(
numbering: "1"
)
#outline(
title: "Turinys"
)
#pagebreak()
#body
]
}
// Bibliography shorthand
#let bibl(path) = {
[
#bibliography(
path,
title: "Literatūros sąrašas",
full: true
)
]
}
// PRESENTATION
#import "@preview/polylux:0.3.1": *
// The margins are set automatically to 2.5/21 times the smaller dimension of the page. This results in 2.5cm margins for an A4 page.
#let autoMarginSize = 2.5/21 * 7.50in
#let margins = (
top: autoMarginSize,
right: autoMarginSize,
left: autoMarginSize,
bottom: autoMarginSize
);
#let ktu-theme(body) = {
set page(
fill: white,
numbering: "1",
number-align: right,
width: 13.33in,
height: 7.50in,
margin: margins,
footer: {
locate(loc => {
let page-counter = counter(page).display("1")
if loc.page() != 1 {
place(bottom+right, dx: 18pt, dy: -20pt)[
#set text(size: 14pt)
*#page-counter*
]
}
})
}
)
// Default content size
set text(size: 22pt, font: "Arial")
// First level heading size
show heading.where(level: 1): it => [
#set text(size: 50pt)
#it.body
];
// Second level heading size
show heading.where(level: 2): it => [
#set text(size: 30pt)
#it.body
];
// Embed the body
body
}
#let ktu-title-slide(body) = {
polylux-slide[
// Content
#set align(bottom)
#box(width: 80%)[
#body
]
// Horizontal line
#place(
top,
dx: 222pt,
dy: -200pt,
pad(
right: -margins.right + 100pt,
left: -margins.left,
scale(
x: 300%,
rotate(
-90deg,
image("Assets/image12.svg")
)
)
)
)
/*
#place(
top,
dx: 190pt,
//dy: -200pt,
dy: -88pt,
pad(
//right: -margins.right + 100pt,
//left: -margins.left,
scale(
y: 10%,
x: 10%,
image("Assets/image4.svg")
)
)
)
*/
// KTU logo
#place(
top,
dx: 792pt,
dy: -40pt,
image("Assets/ktu-logo.png", height: 36mm)
)
// Vertical line
#place(
top,
dx: 360pt,
dy: 385pt,
pad(
top: -margins.top,
bottom: -margins.bottom,
rotate(
-90deg,
scale(
y: -100%,
image("Assets/image15.svg")
)
)
)
)
// Text on the vertical line side
#place(top, dx: 670pt, dy: 250pt)[
#set text(size: 15pt)
#rotate(-90deg)[
*UŽ KIEKVIENOS TECHNOLOGIJOS ŽMOGUS*
]
]
]
}
#let ktu-outline-slide(body) = {
polylux-slide[
// Content
#box(
pad(
left: 90pt,
body
)
)
// KTU logo
#place(
top,
//dx: 792pt,
dx: -50pt,
dy: -40pt,
image("Assets/ktu-logo.png", height: 36mm)
)
// Vertical line
#place(
top,
dx: -360pt,
dy: 385pt,
pad(
top: -margins.top,
bottom: -margins.bottom,
rotate(
90deg,
scale(
y: -100%,
x: -100%,
image("Assets/image15.svg")
)
)
)
)
// Text on the vertical line side
#place(top, dx: -170pt, dy: 250pt)[
#set text(size: 15pt)
#rotate(-90deg)[
*UŽ KIEKVIENOS TECHNOLOGIJOS ŽMOGUS*
]
]
]
}
#let ktu-main-slide(body) = {
let header = body.children.find(it => { return it.func() == heading })
polylux-slide[
// Content
#block(width: 95%, height: 100%)[
#header
#v(36pt)
#body.children.filter(it => {return it.func() != heading}).join()
]
// DECORATIONS
// Horizontal line
#place(
top,
dy: 44pt,
pad(
right: -margins.right + 94pt,
left: -margins.left,
image("Assets/image15.svg")
)
)
// KTU logo
#place(
top,
dx: 820pt,
dy: 0pt,
image("Assets/ktu-text.svg", height: 10mm)
)
// Vertical line
#place(
top,
dx: 800pt,
pad(
top: -margins.top,
bottom: -margins.bottom,
image("Assets/image12.svg")
)
)
// Text on the vertical line side
#place(top, dx: 700pt, dy: 250pt)[
#set text(size: 13pt)
#rotate(-90deg)[
*UŽ KIEKVIENOS TECHNOLOGIJOS ŽMOGUS*
]
]
]
}
#let ktu-no-vertical-slide(body) = {
let header = body.children.find(it => { return it.func() == heading })
polylux-slide[
// Content
#block(width: 100%, height: 100%)[
#header
#v(36pt)
#body.children.filter(it => {return it.func() != heading}).join()
]
// DECORATIONS
// Horizontal line
#place(
top,
dy: 1.52cm,
pad(
right: -margins.right,
left: -margins.left,
image("Assets/image15.svg")
)
)
// KTU logo
#place(
top,
dx: 820pt,
dy: 0pt,
image("Assets/ktu-text.svg", height: 10mm)
)
]
}