forked from pencelheimer/typst_nure_template
1769194548
This commit is contained in:
+5
-1
@@ -25,7 +25,11 @@
|
|||||||
.at(if gender == "m" or gender == "f" { gender } else { "p" }, default: "p")
|
.at(if gender == "m" or gender == "f" { gender } else { "p" }, default: "p")
|
||||||
}
|
}
|
||||||
#let gender-get(dict) = if "gender" in dict.keys() { dict.gender } else { "p" }
|
#let gender-get(dict) = if "gender" in dict.keys() { dict.gender } else { "p" }
|
||||||
#let gender-form(verb, dict) = gender-verb(verb, gender: gender-get(dict))
|
#let gender-form(verb, dict: none) = if type(dict) == "dictionary" {
|
||||||
|
gender-verb(verb, gender: gender-get(dict))
|
||||||
|
} else {
|
||||||
|
gender-verb(verb, gender: none)
|
||||||
|
}
|
||||||
|
|
||||||
#let degree-get(m) = if "degree" in m.keys() and m.degree != none { [#m.degree\ ] }
|
#let degree-get(m) = if "degree" in m.keys() and m.degree != none { [#m.degree\ ] }
|
||||||
|
|
||||||
|
|||||||
+14
-253
@@ -36,250 +36,16 @@
|
|||||||
|
|
||||||
show: style.dstu.with(skip: 1)
|
show: style.dstu.with(skip: 1)
|
||||||
|
|
||||||
let bib-count = state("citation-counter", ())
|
tp.cw.coursework(
|
||||||
show cite: it => {
|
university,
|
||||||
it
|
subject,
|
||||||
bib-count.update(((..c)) => (..c, it.key))
|
type,
|
||||||
}
|
title,
|
||||||
show bibliography: it => {
|
authors,
|
||||||
set text(size: 0pt)
|
mentors,
|
||||||
it
|
task_list,
|
||||||
}
|
calendar_plan,
|
||||||
|
abstract,
|
||||||
let author = authors.first()
|
|
||||||
let head_mentor = mentors.first()
|
|
||||||
let uni = universities.at(university)
|
|
||||||
let edu_prog = uni.edu_programs.at(author.edu_program)
|
|
||||||
|
|
||||||
// page 1 {{{2
|
|
||||||
[
|
|
||||||
#set align(center)
|
|
||||||
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ\
|
|
||||||
#upper(uni.name)
|
|
||||||
|
|
||||||
\
|
|
||||||
|
|
||||||
Кафедра #edu_prog.department_gen
|
|
||||||
|
|
||||||
\
|
|
||||||
|
|
||||||
ПОЯСНЮВАЛЬНА ЗАПИСКА\
|
|
||||||
ДО КУРСОВОЇ РОБОТИ\
|
|
||||||
з дисципліни: "#uni.subjects.at(subject, default: subject)"\
|
|
||||||
Тема роботи: "#title"
|
|
||||||
|
|
||||||
\ \ \
|
|
||||||
|
|
||||||
#columns(2, gutter: 4cm)[
|
|
||||||
#set align(left)
|
|
||||||
#set par(first-line-indent: 0pt)
|
|
||||||
|
|
||||||
#gender-form("author", author) ст. гр. #author.edu_program\-#author.group
|
|
||||||
|
|
||||||
\
|
|
||||||
Керівник:\
|
|
||||||
#head_mentor.degree
|
|
||||||
|
|
||||||
\
|
|
||||||
Робота захищена на оцінку
|
|
||||||
|
|
||||||
\
|
|
||||||
Комісія:\
|
|
||||||
#for m in mentors { degree-get(m) }
|
|
||||||
|
|
||||||
#colbreak()
|
|
||||||
#set align(left)
|
|
||||||
|
|
||||||
|
|
||||||
#author.name
|
|
||||||
|
|
||||||
\ \
|
|
||||||
#head_mentor.name
|
|
||||||
|
|
||||||
\
|
|
||||||
#underline(" " * 35)
|
|
||||||
|
|
||||||
\ \
|
|
||||||
#for m in mentors { [#m.name\ ] }
|
|
||||||
]
|
|
||||||
|
|
||||||
#v(1fr)
|
|
||||||
|
|
||||||
Харків -- #task_list.done_date.display("[year]")
|
|
||||||
|
|
||||||
#pagebreak()
|
|
||||||
]
|
|
||||||
|
|
||||||
// page 2 {{{2
|
|
||||||
{
|
|
||||||
uline[#uni.name]
|
|
||||||
|
|
||||||
linebreak()
|
|
||||||
linebreak()
|
|
||||||
|
|
||||||
grid(
|
|
||||||
columns: (100pt, 1fr),
|
|
||||||
bold[
|
|
||||||
Кафедра
|
|
||||||
Дисципліна
|
|
||||||
Спеціальність
|
|
||||||
],
|
|
||||||
{
|
|
||||||
uline(align: left, edu_prog.department_gen)
|
|
||||||
linebreak()
|
|
||||||
uline(align: left, uni.subjects.at(subject, default: subject))
|
|
||||||
linebreak()
|
|
||||||
uline(align: left, [#edu_prog.code #edu_prog.name_long])
|
|
||||||
},
|
|
||||||
)
|
|
||||||
grid(
|
|
||||||
columns: (1fr, 1fr, 1fr),
|
|
||||||
gutter: 0.3fr,
|
|
||||||
[#bold[Курс] #uline(author.course)],
|
|
||||||
[#bold[Група] #uline([#author.edu_program\-#author.group])],
|
|
||||||
[#bold[Семестр] #uline(author.semester)],
|
|
||||||
)
|
|
||||||
|
|
||||||
linebreak()
|
|
||||||
linebreak()
|
|
||||||
linebreak()
|
|
||||||
|
|
||||||
align(center, bold[ЗАВДАННЯ \ на курсову роботу студента])
|
|
||||||
|
|
||||||
linebreak()
|
|
||||||
|
|
||||||
uline(align: left)[_#author.full_name_gen _]
|
|
||||||
|
|
||||||
linebreak()
|
|
||||||
linebreak()
|
|
||||||
|
|
||||||
bold[\1. Тема роботи:]
|
|
||||||
uline[#title.]
|
|
||||||
|
|
||||||
linebreak()
|
|
||||||
|
|
||||||
{
|
|
||||||
bold[\2. Строк здачі закінченої роботи:]
|
|
||||||
uline(task_list.done_date.display("[day].[month].[year]"))
|
|
||||||
hfill(10fr)
|
|
||||||
}
|
|
||||||
|
|
||||||
linebreak()
|
|
||||||
|
|
||||||
bold[\3. Вихідні дані для роботи:]
|
|
||||||
uline(task_list.source)
|
|
||||||
|
|
||||||
linebreak()
|
|
||||||
|
|
||||||
bold[\4. Зміст розрахунково-пояснювальної записки:]
|
|
||||||
uline(task_list.content)
|
|
||||||
|
|
||||||
linebreak()
|
|
||||||
|
|
||||||
bold[\5. Перелік графічного матеріалу:]
|
|
||||||
uline(task_list.graphics)
|
|
||||||
|
|
||||||
linebreak()
|
|
||||||
|
|
||||||
{
|
|
||||||
bold[\6. Дата видачі завдання:]
|
|
||||||
uline(task_list.initial_date.display("[day].[month].[year]"))
|
|
||||||
hfill(10fr)
|
|
||||||
}
|
|
||||||
|
|
||||||
pagebreak()
|
|
||||||
}
|
|
||||||
|
|
||||||
// page 3 {{{2
|
|
||||||
{
|
|
||||||
align(center, bold[КАЛЕНДАРНИЙ ПЛАН])
|
|
||||||
set par(first-line-indent: 0pt)
|
|
||||||
|
|
||||||
linebreak()
|
|
||||||
|
|
||||||
calendar_plan.plan_table
|
|
||||||
|
|
||||||
linebreak()
|
|
||||||
|
|
||||||
grid(
|
|
||||||
columns: (5fr, 5fr),
|
|
||||||
grid(
|
|
||||||
columns: (1fr, 2fr, 1fr),
|
|
||||||
gutter: 0.2fr,
|
|
||||||
[
|
|
||||||
Студент \
|
|
||||||
Керівник \
|
|
||||||
#align(center)["#underline[#calendar_plan.approval_date.day()]"]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
#uline(align: center, []) \
|
|
||||||
#uline(align: center, []) \
|
|
||||||
#uline(align: center, month-gen(calendar_plan.approval_date.month()))
|
|
||||||
],
|
|
||||||
[
|
|
||||||
\ \
|
|
||||||
#underline[#calendar_plan.approval_date.year()] р.
|
|
||||||
],
|
|
||||||
),
|
|
||||||
[
|
|
||||||
#author.name, \
|
|
||||||
#head_mentor.degree
|
|
||||||
#head_mentor.name.
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
pagebreak()
|
|
||||||
}
|
|
||||||
|
|
||||||
// page 4 {{{2
|
|
||||||
[
|
|
||||||
#align(center, bold[РЕФЕРАТ]) \
|
|
||||||
|
|
||||||
#context [
|
|
||||||
#let pages = counter(page).final().at(0)
|
|
||||||
#let images = query(figure.where(kind: image)).len()
|
|
||||||
#let tables = query(figure.where(kind: table)).len()
|
|
||||||
#let bibs = bib-count.final().dedup().len()
|
|
||||||
/* TODO: why this stopped working?
|
|
||||||
#let tables = counter(figure.where(kind: table)).final().at(0)
|
|
||||||
#let images = counter(figure.where(kind: image)).final().at(0)*/
|
|
||||||
|
|
||||||
#let counters = ()
|
|
||||||
|
|
||||||
#if pages != 0 { counters.push[#pages с.] }
|
|
||||||
#if tables != 0 { counters.push[#tables табл.] }
|
|
||||||
#if images != 0 { counters.push[#images рис.] }
|
|
||||||
#if bibs != 0 { counters.push[#bibs джерел] }
|
|
||||||
|
|
||||||
Пояснювальна записка до курсової роботи: #counters.join(", ").
|
|
||||||
]
|
|
||||||
|
|
||||||
\
|
|
||||||
|
|
||||||
#(
|
|
||||||
abstract
|
|
||||||
.keywords
|
|
||||||
.map(upper)
|
|
||||||
.sorted(by: (a, b) => {
|
|
||||||
if is-cyr(a) != is-cyr(b) { true } else { a < b }
|
|
||||||
})
|
|
||||||
.join(", ")
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
\
|
|
||||||
|
|
||||||
#abstract.text
|
|
||||||
]
|
|
||||||
|
|
||||||
// page 5 {{{2
|
|
||||||
outline(
|
|
||||||
title: [
|
|
||||||
ЗМІСТ
|
|
||||||
#v(spacing * 2, weak: true)
|
|
||||||
],
|
|
||||||
depth: 2,
|
|
||||||
indent: auto,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
doc
|
doc
|
||||||
@@ -308,9 +74,9 @@
|
|||||||
[#c.title. #c.author. URL: #c.url.value (дата звернення: #date.display("[day].[month].[year]")).]
|
[#c.title. #c.author. URL: #c.url.value (дата звернення: #date.display("[day].[month].[year]")).]
|
||||||
} else if (
|
} else if (
|
||||||
c.type == "Book"
|
c.type == "Book"
|
||||||
) [#c.author #c.title. #c.publisher, #c.date. #c.page-total c. ] else [
|
) [#c.author #c.title. #c.publisher, #c.date. #c.page-total c. ] else {
|
||||||
UNSUPPORTED BIBLIOGRAPHY ENTRY TYPE, PLEASE OPEN AN ISSUE
|
panic("Unsupported bibliography entry type")
|
||||||
]
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
show enum.item: it => {
|
show enum.item: it => {
|
||||||
@@ -325,12 +91,7 @@
|
|||||||
for (i, citation) in query(ref.where(element: none))
|
for (i, citation) in query(ref.where(element: none))
|
||||||
.map(r => str(r.target))
|
.map(r => str(r.target))
|
||||||
.dedup()
|
.dedup()
|
||||||
.enumerate() {
|
.enumerate() { enum.item(i + 1, format-entry(bib_data.at(citation))) }
|
||||||
enum.item(
|
|
||||||
i + 1,
|
|
||||||
format-entry(bib_data.at(citation)),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,261 @@
|
|||||||
|
#import "../../shared.typ": universities
|
||||||
|
#import "../../helpers.typ": *
|
||||||
|
#import "../../style.typ": *
|
||||||
|
#import "../../utils.typ": bold, hfill, uline
|
||||||
|
|
||||||
|
#let coursework(
|
||||||
|
university,
|
||||||
|
subject,
|
||||||
|
type,
|
||||||
|
title,
|
||||||
|
authors,
|
||||||
|
mentors,
|
||||||
|
task_list,
|
||||||
|
calendar_plan,
|
||||||
|
abstract,
|
||||||
|
) = {
|
||||||
|
let bib-count = state("citation-counter", ())
|
||||||
|
show cite: it => {
|
||||||
|
it
|
||||||
|
bib-count.update(((..c)) => (..c, it.key))
|
||||||
|
}
|
||||||
|
show bibliography: it => {
|
||||||
|
set text(size: 0pt)
|
||||||
|
it
|
||||||
|
}
|
||||||
|
|
||||||
|
let author = authors.first()
|
||||||
|
let head_mentor = mentors.first()
|
||||||
|
|
||||||
|
let uni = universities.at(university)
|
||||||
|
let edu_prog = uni.edu_programs.at(author.edu_program)
|
||||||
|
|
||||||
|
// page 1 {{{2
|
||||||
|
[
|
||||||
|
#set align(center)
|
||||||
|
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ\
|
||||||
|
#upper(uni.name)
|
||||||
|
|
||||||
|
\
|
||||||
|
|
||||||
|
Кафедра #edu_prog.department_gen
|
||||||
|
|
||||||
|
\
|
||||||
|
|
||||||
|
ПОЯСНЮВАЛЬНА ЗАПИСКА\
|
||||||
|
ДО КУРСОВОЇ РОБОТИ\
|
||||||
|
з дисципліни: "#uni.subjects.at(subject, default: subject)"\
|
||||||
|
Тема роботи: "#title"
|
||||||
|
|
||||||
|
\ \ \
|
||||||
|
|
||||||
|
#columns(2, gutter: 4cm)[
|
||||||
|
#set align(left)
|
||||||
|
#set par(first-line-indent: 0pt)
|
||||||
|
|
||||||
|
#gender-form("author", author) ст. гр. #author.edu_program\-#author.group
|
||||||
|
|
||||||
|
\
|
||||||
|
Керівник:\
|
||||||
|
#head_mentor.degree
|
||||||
|
|
||||||
|
\
|
||||||
|
Робота захищена на оцінку
|
||||||
|
|
||||||
|
\
|
||||||
|
Комісія:\
|
||||||
|
#for m in mentors { degree-get(m) }
|
||||||
|
|
||||||
|
#colbreak()
|
||||||
|
#set align(left)
|
||||||
|
|
||||||
|
|
||||||
|
#author.name
|
||||||
|
|
||||||
|
\ \
|
||||||
|
#head_mentor.name
|
||||||
|
|
||||||
|
\
|
||||||
|
#underline(" " * 35)
|
||||||
|
|
||||||
|
\ \
|
||||||
|
#for m in mentors { [#m.name\ ] }
|
||||||
|
]
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
Харків -- #task_list.done_date.display("[year]")
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
]
|
||||||
|
|
||||||
|
// page 2 {{{2
|
||||||
|
{
|
||||||
|
uline[#uni.name]
|
||||||
|
|
||||||
|
linebreak()
|
||||||
|
linebreak()
|
||||||
|
|
||||||
|
grid(
|
||||||
|
columns: (100pt, 1fr),
|
||||||
|
bold[
|
||||||
|
Кафедра
|
||||||
|
Дисципліна
|
||||||
|
Спеціальність
|
||||||
|
],
|
||||||
|
{
|
||||||
|
uline(align: left, edu_prog.department_gen)
|
||||||
|
linebreak()
|
||||||
|
uline(align: left, uni.subjects.at(subject, default: subject))
|
||||||
|
linebreak()
|
||||||
|
uline(align: left, [#edu_prog.code #edu_prog.name_long])
|
||||||
|
},
|
||||||
|
)
|
||||||
|
grid(
|
||||||
|
columns: (1fr, 1fr, 1fr),
|
||||||
|
gutter: 0.3fr,
|
||||||
|
[#bold[Курс] #uline(author.course)],
|
||||||
|
[#bold[Група] #uline([#author.edu_program\-#author.group])],
|
||||||
|
[#bold[Семестр] #uline(author.semester)],
|
||||||
|
)
|
||||||
|
|
||||||
|
linebreak()
|
||||||
|
linebreak()
|
||||||
|
linebreak()
|
||||||
|
|
||||||
|
align(center, bold[ЗАВДАННЯ \ на курсову роботу студента])
|
||||||
|
|
||||||
|
linebreak()
|
||||||
|
|
||||||
|
uline(align: left)[_#author.full_name_gen _]
|
||||||
|
|
||||||
|
linebreak()
|
||||||
|
linebreak()
|
||||||
|
|
||||||
|
bold[\1. Тема роботи:]
|
||||||
|
uline[#title.]
|
||||||
|
|
||||||
|
linebreak()
|
||||||
|
|
||||||
|
{
|
||||||
|
bold[\2. Строк здачі закінченої роботи:]
|
||||||
|
uline(task_list.done_date.display("[day].[month].[year]"))
|
||||||
|
hfill(10fr)
|
||||||
|
}
|
||||||
|
|
||||||
|
linebreak()
|
||||||
|
|
||||||
|
bold[\3. Вихідні дані для роботи:]
|
||||||
|
uline(task_list.source)
|
||||||
|
|
||||||
|
linebreak()
|
||||||
|
|
||||||
|
bold[\4. Зміст розрахунково-пояснювальної записки:]
|
||||||
|
uline(task_list.content)
|
||||||
|
|
||||||
|
linebreak()
|
||||||
|
|
||||||
|
bold[\5. Перелік графічного матеріалу:]
|
||||||
|
uline(task_list.graphics)
|
||||||
|
|
||||||
|
linebreak()
|
||||||
|
|
||||||
|
{
|
||||||
|
bold[\6. Дата видачі завдання:]
|
||||||
|
uline(task_list.initial_date.display("[day].[month].[year]"))
|
||||||
|
hfill(10fr)
|
||||||
|
}
|
||||||
|
|
||||||
|
pagebreak()
|
||||||
|
}
|
||||||
|
|
||||||
|
// page 3 {{{2
|
||||||
|
{
|
||||||
|
align(center, bold[КАЛЕНДАРНИЙ ПЛАН])
|
||||||
|
set par(first-line-indent: 0pt)
|
||||||
|
|
||||||
|
linebreak()
|
||||||
|
|
||||||
|
calendar_plan.plan_table
|
||||||
|
|
||||||
|
linebreak()
|
||||||
|
|
||||||
|
grid(
|
||||||
|
columns: (5fr, 5fr),
|
||||||
|
grid(
|
||||||
|
columns: (1fr, 2fr, 1fr),
|
||||||
|
gutter: 0.2fr,
|
||||||
|
[
|
||||||
|
Студент \
|
||||||
|
Керівник \
|
||||||
|
#align(center)["#underline[#calendar_plan.approval_date.day()]"]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
#uline(align: center, []) \
|
||||||
|
#uline(align: center, []) \
|
||||||
|
#uline(align: center, month-gen(calendar_plan.approval_date.month()))
|
||||||
|
],
|
||||||
|
[
|
||||||
|
\ \
|
||||||
|
#underline[#calendar_plan.approval_date.year()] р.
|
||||||
|
],
|
||||||
|
),
|
||||||
|
[
|
||||||
|
#author.name, \
|
||||||
|
#head_mentor.degree
|
||||||
|
#head_mentor.name.
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
pagebreak()
|
||||||
|
}
|
||||||
|
|
||||||
|
// page 4 {{{2
|
||||||
|
[
|
||||||
|
#align(center, bold[РЕФЕРАТ]) \
|
||||||
|
|
||||||
|
#context [
|
||||||
|
#let pages = counter(page).final().at(0)
|
||||||
|
#let images = query(figure.where(kind: image)).len()
|
||||||
|
#let tables = query(figure.where(kind: table)).len()
|
||||||
|
#let bibs = bib-count.final().dedup().len()
|
||||||
|
/* TODO: why this stopped working?
|
||||||
|
#let tables = counter(figure.where(kind: table)).final().at(0)
|
||||||
|
#let images = counter(figure.where(kind: image)).final().at(0)*/
|
||||||
|
|
||||||
|
#let counters = ()
|
||||||
|
|
||||||
|
#if pages != 0 { counters.push[#pages с.] }
|
||||||
|
#if tables != 0 { counters.push[#tables табл.] }
|
||||||
|
#if images != 0 { counters.push[#images рис.] }
|
||||||
|
#if bibs != 0 { counters.push[#bibs джерел] }
|
||||||
|
|
||||||
|
Пояснювальна записка до курсової роботи: #counters.join(", ").
|
||||||
|
]
|
||||||
|
|
||||||
|
\
|
||||||
|
|
||||||
|
#(
|
||||||
|
abstract
|
||||||
|
.keywords
|
||||||
|
.map(upper)
|
||||||
|
.sorted(by: (a, b) => {
|
||||||
|
if is-cyr(a) != is-cyr(b) { true } else { a < b }
|
||||||
|
})
|
||||||
|
.join(", ")
|
||||||
|
)
|
||||||
|
|
||||||
|
\
|
||||||
|
#abstract.text
|
||||||
|
]
|
||||||
|
|
||||||
|
// page 5 {{{2
|
||||||
|
outline(
|
||||||
|
title: [
|
||||||
|
ЗМІСТ
|
||||||
|
#v(spacing * 2, weak: true)
|
||||||
|
],
|
||||||
|
depth: 2,
|
||||||
|
indent: auto,
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
#import "coursework.typ": *
|
||||||
@@ -1 +1,2 @@
|
|||||||
#import "pz-lb/main.typ" as pz-lb
|
#import "pz-lb/main.typ" as pz-lb
|
||||||
|
#import "coursework/main.typ" as cw
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
#if authors.len() == 1 {
|
#if authors.len() == 1 {
|
||||||
let a = authors.first()
|
let a = authors.first()
|
||||||
[#gender-form("author", a)):\ ]
|
[#gender-form("author", dict: a):\ ]
|
||||||
[ст. гр. #a.edu_program\-#a.group\ ]
|
[ст. гр. #a.edu_program\-#a.group\ ]
|
||||||
[#a.name\ ]
|
[#a.name\ ]
|
||||||
if a.variant != none [Варіант: №#a.variant]
|
if a.variant != none [Варіант: №#a.variant]
|
||||||
@@ -33,11 +33,11 @@
|
|||||||
|
|
||||||
#if mentors.len() == 1 {
|
#if mentors.len() == 1 {
|
||||||
let m = mentors.first()
|
let m = mentors.first()
|
||||||
[#gender-form("mentor", m)):\ ]
|
[#gender-form("mentor", dict: m):\ ]
|
||||||
degree-get(m)
|
degree-get(m)
|
||||||
[#m.name\ ]
|
[#m.name\ ]
|
||||||
} else if mentors.len() > 1 [
|
} else if mentors.len() > 1 [
|
||||||
#gender-form("mentor", m)):\
|
#gender-form("mentor"):\
|
||||||
#for m in mentors {
|
#for m in mentors {
|
||||||
degree-get(m)
|
degree-get(m)
|
||||||
[#m.name\ ]
|
[#m.name\ ]
|
||||||
|
|||||||
Reference in New Issue
Block a user