// Титульный лист расчётного задания по экономике. // Конвертировано из «Титульный лист.docx», оформление — в стиле проекта // diploma-typst (title-page/title-page.typ). Запуск: typst compile // ── Данные расчётного задания ───────────────────────────────────────── #let task = ( ministry: "Министерство науки и высшего образования РФ", university_prename: "Федеральное государственное автономное\nобразовательное учреждение высшего образования\n", university_shorten: "«СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»", institute: "Институт цветных металлов", department: "Бизнес-информатики и моделирования бизнес-процессов", work_type: "РАСЧЕТНОЕ ЗАДАНИЕ", topic: "Горные предприятия как объект исследования экономики\nи менеджмента горного производства", teacher: "Л.Н. Кузина", group: "ГГ21-10", student_short_name: "А.С. Ткаченко", city: "Красноярск", year: "2026", ) // ── Ручная подстройка положения блоков ──────────────────────────────── // Значения в мм: dx > 0 — вправо, dy > 0 — вниз. // move() сдвигает блок только визуально и не сдвигает остальные блоки. #let shift = ( header: (dx: 0mm, dy: 0mm), // шапка: министерство + университет institute: (dx: 0mm, dy: 0mm), // «Институт цветных металлов» + подпись department: (dx: 0mm, dy: 0mm), // кафедра + подпись work_type: (dx: 0mm, dy: 0mm), // «РАСЧЕТНОЕ ЗАДАНИЕ» topic: (dx: 0mm, dy: 0mm), // «по» + тема signatures: (dx: 0mm, dy: 0mm), // преподаватель + студент (одна таблица) city: (dx: 0mm, dy: 0mm), // «Красноярск 2026» ) // ── Помощники (повторяют title-page/title-page.typ) ─────────────────── #let signature_label(body) = text(size: 10pt)[#body] #let topic_label_offset = -10pt #let signature_stroke = 0.65pt + black // Значение на underline + подпись под чертой (институт, кафедра, тема) #let line_field(value, label, width: 145mm) = box(width: width)[ #align(center)[#underline(offset: 2pt, stroke: 0.7pt + black)[#value]] #v(topic_label_offset) #v(-1pt) #align(center)[#signature_label[#label]] ] // Значение на underline + подпись под чертой (номер группы и т.п.) #let signature_field(value, label, width: 40mm) = box(width: width)[ #box(height: 8.5pt)[#align(center)[#underline()[#value]]] #v(0pt) #v(-10pt) #box(height: 8.5pt)[#align(center)[#signature_label[#label]]] ] // ФИО на underline + подпись «инициалы, фамилия» #let signature_name_field(value, width: 40mm) = box(width: width)[ #box(height: 8.5pt)[#align(center)[#underline[#value]]] #v(0pt) #v(-10pt) #box(height: 8.5pt)[#align(center)[#signature_label[инициалы, фамилия]]] #v(15pt) ] // Пустая строка для подписи + подпись «подпись, дата» #let blank_signature(width: 26mm) = box(width: width)[ #move(dy: 10pt)[#line(length: 100%, stroke: signature_stroke)] #move(dy: -5.5mm)[ #box(height: 8.5pt)[#align(center)[#signature_label[подпись, дата]]] ] ] // ── Страница ─────────────────────────────────────────────────────────── #set page(paper: "a4", margin: (left: 30mm, right: 10mm, top: 20mm, bottom: 20mm)) #set text(font: "Times New Roman", size: 14pt, lang: "ru") #set par(justify: false, first-line-indent: 0pt, leading: 0.65em) // ── Шапка ────────────────────────────────────────────────────────────── #move(dx: shift.header.dx, dy: shift.header.dy)[ #align(center)[ #text(size: 14pt)[#task.ministry] #linebreak() #text(size: 12pt)[#task.university_prename] *#task.university_shorten* ] ] #v(5mm) // ── Институт ─────────────────────────────────────────────────────────── #move(dx: shift.institute.dx, dy: shift.institute.dy)[ #align(center)[#line_field(task.institute, [институт], width: 135mm)] ] #v(4mm) // ── Кафедра ──────────────────────────────────────────────────────────── #move(dx: shift.department.dx, dy: shift.department.dy)[ #align(center)[#line_field(task.department, [кафедра], width: 145mm)] ] #v(25mm) // ── Тип работы ───────────────────────────────────────────────────────── #move(dx: shift.work_type.dx, dy: shift.work_type.dy)[ #align(center)[#text(size: 16pt, weight: "bold")[#task.work_type]] ] #v(8mm) // ── Тема («по» слева; тема центрирована по оси заголовка выше) ───────── #move(dx: shift.topic.dx, dy: shift.topic.dy)[ #grid( columns: (1fr, 145mm, 1fr), column-gutter: 0pt, align: (right + top, center, left), [по], line_field(task.topic, [тема], width: 145mm), [], ) ] #v(35mm) // ── Подписи ──────────────────────────────────────────────────────────── // Одна таблица с общими колонками (как title_signature_block в // diploma-typst): черты для подписи и ФИО строго друг под другом. #move(dx: shift.signatures.dx, dy: shift.signatures.dy)[ #table( columns: (34mm, 49mm, 8mm, 27mm, 11mm, 41mm), stroke: none, inset: (x: 0pt, y: 2.2mm), align: (left, center, center, center, center, center), // Преподаватель | (пусто) | подпись | (пусто) | ФИО table.cell(colspan: 2)[Преподаватель], [], blank_signature(width: 27mm), [], signature_name_field(task.teacher, width: 41mm), // Студент | номер группы | подпись | (пусто) | ФИО [Студент], signature_field(task.group, [номер группы, зачетной книжки], width: 49mm), [], blank_signature(width: 27mm), [], signature_name_field(task.student_short_name, width: 41mm), ) ] // ── Город, год — центр физического листа, у нижнего поля ─────────────── #context { // сдвиг к центру физического листа (поля 30/10 мм) + ручная подстройка let dx = (page.margin.right - page.margin.left) / 2 + shift.city.dx place(bottom + center, dx: dx, dy: shift.city.dy)[#task.city #task.year] }