| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- // Титульный лист практической работы (СФУ).
- // Компилируется отдельно: typst compile title-page.typ
- // Подключается первой страницей в main.typ.
- // ── Данные работы (менять только здесь) ────────────────────────────────
- #let task = (
- ministry: "Министерство науки и высшего образования РФ",
- university_prename: "Федеральное государственное автономное\nобразовательное учреждение высшего образования\n",
- university_shorten: "«СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»",
- institute: "Институт цветных металлов",
- department: "Шахтное и подземное строительство",
- work_type: "ПРАКТИЧЕСКАЯ РАБОТА №1",
- topic: "Горные предприятия как объект исследования экономики\nи менеджмента горного производства",
- teacher: "Г. С. Курчин",
- group: "ГГ21-10",
- student_short_name: "А.С. Ткаченко",
- city: "Красноярск",
- year: "2026 г.",
- )
- // ── Страница ───────────────────────────────────────────────────────────
- // Поля симметричные: центр текстовой колонки совпадает с центром листа,
- // поэтому для центрирования достаточно обычного align(center).
- #set page(paper: "a4", margin: (x: 20mm, y: 20mm))
- #set text(font: "Times New Roman", size: 14pt, lang: "ru")
- #set par(justify: false, first-line-indent: 0pt, leading: 0.65em)
- // ── Поле: значение на черте + подпись под чертой ───────────────────────
- // Одна и та же геометрия у всех полей листа: черта значения — underline
- // на базовой линии текста, пустая черта — line на той же высоте
- // (blank-line-dy). Оба варианта лежат в слоте фиксированной высоты,
- // поэтому подписи всегда на одинаковом расстоянии от своих черт, а
- // черты соседних полей — на одной горизонтали.
- // value = none → пустая черта (для подписи), требуется width.
- #let label-size = 10pt
- #let field-stroke = 0.7pt + black
- #let slot-height = 16pt // высота слота со значением
- #let blank-line-dy = 11.5pt // уровень пустой черты = уровень underline
- #let label-gap = 2.8mm // зазор от черты до подписи
- #let label-lift = 10.5pt // компенсация верхнего интервала строки подписи
- #let field(value, label, width: 100%) = box(width: width)[
- #grid(
- columns: 100%,
- inset: 0pt,
- align: center + top,
- rows: (slot-height, auto),
- // черта со значением (или пустая черта для подписи)
- [
- #if value == none [
- #move(dy: blank-line-dy)[#line(length: 100%, stroke: field-stroke)]
- ] else [
- #underline(offset: 2pt, stroke: field-stroke)[#value]
- ]
- ],
- // подпись под чертой
- [
- #v(label-gap + slot-height - blank-line-dy - label-lift)
- #text(size: label-size)[#label]
- ],
- )
- ]
- // ── Шапка ──────────────────────────────────────────────────────────────
- #align(center)[
- #text(size: 14pt)[#task.ministry]
- #linebreak()
- #text(size: 12pt)[#task.university_prename]
- *#task.university_shorten*
- ]
- #v(5mm)
- // ── Институт ───────────────────────────────────────────────────────────
- #align(center)[#field(task.institute, [институт], width: 135mm)]
- #v(4mm)
- // ── Кафедра ────────────────────────────────────────────────────────────
- #align(center)[#field(task.department, [кафедра], width: 145mm)]
- #v(25mm)
- // ── Тип работы ─────────────────────────────────────────────────────────
- #align(center)[#text(size: 16pt, weight: "bold")[#task.work_type]]
- #v(8mm)
- // ── Тема ───────────────────────────────────────────────────────────────
- #align(center)[
- #grid(
- columns: 100%,
- inset: 0pt,
- align: center + top,
- [
- #underline(offset: 2pt, stroke: field-stroke)[#task.topic]
- ],
- [
- #v(label-gap + 2pt)
- #text(size: label-size)[тема]
- ],
- )
- ]
- #v(35mm)
- // ── Подписи ────────────────────────────────────────────────────────────
- // Колонки: роль | группа | зазор | подпись | зазор | ФИО.
- // Черты для подписи и подчёркнутые значения в одной строке таблицы
- // находятся на одном уровне благодаря общей геометрии field().
- #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)[Преподаватель],
- [],
- field(none, [подпись, дата], width: 27mm),
- [],
- field(task.teacher, [инициалы, фамилия]),
- [Студент],
- field(task.group, [номер группы, зачетной книжки]),
- [],
- field(none, [подпись, дата], width: 27mm),
- [],
- field(task.student_short_name, [инициалы, фамилия]),
- )
- // ── Город, год — по центру листа, у нижнего поля ───────────────────────
- #place(bottom + center)[#task.city #task.year]
|