summaryrefslogtreecommitdiff
path: root/conf.typ
diff options
context:
space:
mode:
authorДанила Григорьев <danila.sar@yandex.ru>2024-09-04 18:44:02 +0400
committerДанила Григорьев <danila.sar@yandex.ru>2024-09-04 18:44:02 +0400
commite790c6bc654d94c6f51104df86cc6d56237f4e15 (patch)
tree3f9c99a10f31ab06f33215e69d497507c2faf37a /conf.typ
Взлетаем
Diffstat (limited to 'conf.typ')
-rw-r--r--conf.typ188
1 files changed, 188 insertions, 0 deletions
diff --git a/conf.typ b/conf.typ
new file mode 100644
index 0000000..63ad32f
--- /dev/null
+++ b/conf.typ
@@ -0,0 +1,188 @@
+#let header() = {
+ set align(center)
+ set text(font: "Cambria")
+ text("МИНОБРНАУКИ РОССИИ\nФедеральное государственное бюджетное образовательное учреждение\nвысшего образования\n")
+ v(0.2em)
+ text(weight: "bold", "«САРАТОВСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
+ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
+ ИМЕНИ Н. Г. ЧЕРНЫШЕВСКОГО»\n")
+ set align(left)
+}
+
+#let signature(post, name) = {
+ grid(
+ columns: (1fr,) * 3,
+ align: (left, center, right),
+ row-gutter: 5pt,
+ post, block(inset: (y: 13pt), line(length: 3cm, stroke: .4pt)), name
+ )
+}
+
+#let get_student_word(sex) = {
+ if sex == "male" {
+ return "студента"
+ } else if sex == "female" {
+ return "студентки"
+ } else if sex == "plural" {
+ return "студентов"
+ }
+}
+
+#let get_speciality(group) = {
+ let specialities = (
+ [02.03.02 --- Фундаментальная информатика и информационные технологии],
+ [09.03.01 --- Информатика и вычислительная техника],
+ [10.05.01 --- Компьютерная безопасность],
+ [02.03.03 --- Математическое обеспечение и администрирование информационных систем],
+ [09.03.04 --- Программная инженерия],
+ [], // x6x
+ [09.04.01 --- Информатика и вычислительная техника],
+ [02.04.03 --- Математическое обеспечение и администрирование информационных систем],
+ [], // x8x
+ )
+ if group.at(1) == "7" { // x7x
+ if group.at(2) == "1" { // x71
+ return specialities.at(6) // ивт
+ } else if group.at(2) == "3" { // x73
+ return specialities.at(7) // моаис
+ }
+ return []
+ }
+ let id = int(group.at(1)) - 1;
+
+ if id < 0 or id > 8 {
+ return []
+ }
+ return specialities.at(id)
+}
+
+#let referat_title(info) = {
+ let author = info.at("author", default: (:))
+ set align(center)
+ v(3cm)
+ text(weight: "bold", upper(info.at("title", default: [Тема работы])))
+ par[РЕФЕРАТ]
+ v(1.5cm)
+ set align(left)
+ let author_string = get_student_word(author.at("sex", default: "male"))
+ author_string = author_string + " " + author.group.at(0) + " курса " + author.group + " группы\n"
+ if author.faculty == [КНиИТ] {
+ author_string = author_string + "направления " + get_speciality(author.group) + "\n"
+ } else if author.at("speciality", default: []) != [] {
+ author_string = author_string + "направления " + author.speciality + "\n"
+ }
+
+ text(author_string + "факультета " + author.faculty + "\n" + author.name)
+ v(1fr)
+ text("Проверено:\n")
+ signature(info.inspector.degree, info.inspector.name)
+}
+
+#let make_title(
+ type: "referat",
+ info: ()
+) = {
+ set page(
+ paper: "a4",
+ margin: (
+ top: 2cm,
+ bottom: 2cm,
+ left: 2.5cm,
+ right: 1.5cm
+ )
+ )
+
+ header()
+ if type == "referat" {
+ referat_title(info)
+ }
+
+ v(1fr)
+ set align(center)
+ text("Саратов 2024")
+}
+
+#let make_toc(
+ info: ()
+) = {
+
+ outline(indent: 2%, title: [Содержание])
+ pagebreak(weak: true)
+}
+
+#let aboba(settings: ()) = {
+
+}
+
+#let conf(
+ title: none,
+ info: (),
+ type: "referat",
+ settings: (),
+ doc
+) = {
+ info.title = title
+ settings.title_page = settings.at("title_page", default: (:))
+
+
+ set text(
+ size: 14pt
+ )
+
+ if settings.title_page.at("enabled", default: true) {
+ make_title(type: type, info: info)
+ }
+ set align(left)
+
+ set page(footer: context [
+ #h(1fr)
+ #counter(page).display(
+ "1"
+ )
+ ])
+
+
+ let caps_headings = (
+ [Содержание],
+ [Введение],
+ [Заключение],
+ [Список использованных источников]
+ )
+ show heading: it => {
+ set text(size: 14pt)
+ if it.depth == 1 {
+ pagebreak(weak: true)
+ }
+ if caps_headings.contains(it.body) {
+ set align(center)
+ counter(heading).update(i => i - 1)
+ upper(it.body)
+ } else {
+ it
+ }
+ }
+ set heading(numbering: "1.1")
+ set page(numbering: "1")
+ if settings.contents_page.enabled {
+ make_toc(info: info)
+ }
+
+ doc
+
+ /*let count = authors.len()
+ let ncols = calc.min(count, 3)
+ grid(
+ columns: (1fr,) * ncols,
+ row-gutter: 24pt,
+ ..authors.map(author => [
+ #author.name \
+ #author.affiliation \
+ #link("mailto:" + author.email)
+ ]),
+ )
+
+ par(justify: false)[
+ *Abstract* \
+ #abstract
+ ]*/
+} \ No newline at end of file