title-page.typ 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. // Титульный лист расчётного задания по экономике.
  2. // Конвертировано из «Титульный лист.docx», оформление — в стиле проекта
  3. // diploma-typst (title-page/title-page.typ). Запуск: typst compile
  4. // ── Данные расчётного задания ─────────────────────────────────────────
  5. #let task = (
  6. ministry: "Министерство науки и высшего образования РФ",
  7. university_prename: "Федеральное государственное автономное\nобразовательное учреждение высшего образования\n",
  8. university_shorten: "«СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»",
  9. institute: "Институт цветных металлов",
  10. department: "Бизнес-информатики и моделирования бизнес-процессов",
  11. work_type: "РАСЧЕТНОЕ ЗАДАНИЕ",
  12. topic: "Горные предприятия как объект исследования экономики\nи менеджмента горного производства",
  13. teacher: "Л.Н. Кузина",
  14. group: "ГГ21-10",
  15. student_short_name: "А.С. Ткаченко",
  16. city: "Красноярск",
  17. year: "2026",
  18. )
  19. // ── Ручная подстройка положения блоков ────────────────────────────────
  20. // Значения в мм: dx > 0 — вправо, dy > 0 — вниз.
  21. // move() сдвигает блок только визуально и не сдвигает остальные блоки.
  22. #let shift = (
  23. header: (dx: 0mm, dy: 0mm), // шапка: министерство + университет
  24. institute: (dx: 0mm, dy: 0mm), // «Институт цветных металлов» + подпись
  25. department: (dx: 0mm, dy: 0mm), // кафедра + подпись
  26. work_type: (dx: 0mm, dy: 0mm), // «РАСЧЕТНОЕ ЗАДАНИЕ»
  27. topic: (dx: 0mm, dy: 0mm), // «по» + тема
  28. signatures: (dx: 0mm, dy: 0mm), // преподаватель + студент (одна таблица)
  29. city: (dx: 0mm, dy: 0mm), // «Красноярск 2026»
  30. )
  31. // ── Помощники (повторяют title-page/title-page.typ) ───────────────────
  32. #let signature_label(body) = text(size: 10pt)[#body]
  33. #let topic_label_offset = -10pt
  34. #let signature_stroke = 0.65pt + black
  35. // Значение на underline + подпись под чертой (институт, кафедра, тема)
  36. #let line_field(value, label, width: 145mm) = box(width: width)[
  37. #align(center)[#underline(offset: 2pt, stroke: 0.7pt + black)[#value]]
  38. #v(topic_label_offset)
  39. #v(-1pt)
  40. #align(center)[#signature_label[#label]]
  41. ]
  42. // Значение на underline + подпись под чертой (номер группы и т.п.)
  43. #let signature_field(value, label, width: 40mm) = box(width: width)[
  44. #box(height: 8.5pt)[#align(center)[#underline()[#value]]]
  45. #v(0pt)
  46. #v(-10pt)
  47. #box(height: 8.5pt)[#align(center)[#signature_label[#label]]]
  48. ]
  49. // ФИО на underline + подпись «инициалы, фамилия»
  50. #let signature_name_field(value, width: 40mm) = box(width: width)[
  51. #box(height: 8.5pt)[#align(center)[#underline[#value]]]
  52. #v(0pt)
  53. #v(-10pt)
  54. #box(height: 8.5pt)[#align(center)[#signature_label[инициалы, фамилия]]]
  55. #v(15pt)
  56. ]
  57. // Пустая строка для подписи + подпись «подпись, дата»
  58. #let blank_signature(width: 26mm) = box(width: width)[
  59. #move(dy: 10pt)[#line(length: 100%, stroke: signature_stroke)]
  60. #move(dy: -5.5mm)[
  61. #box(height: 8.5pt)[#align(center)[#signature_label[подпись, дата]]]
  62. ]
  63. ]
  64. // ── Страница ───────────────────────────────────────────────────────────
  65. #set page(paper: "a4", margin: (left: 30mm, right: 10mm, top: 20mm, bottom: 20mm))
  66. #set text(font: "Times New Roman", size: 14pt, lang: "ru")
  67. #set par(justify: false, first-line-indent: 0pt, leading: 0.65em)
  68. // ── Шапка ──────────────────────────────────────────────────────────────
  69. #move(dx: shift.header.dx, dy: shift.header.dy)[
  70. #align(center)[
  71. #text(size: 14pt)[#task.ministry]
  72. #linebreak()
  73. #text(size: 12pt)[#task.university_prename]
  74. *#task.university_shorten*
  75. ]
  76. ]
  77. #v(5mm)
  78. // ── Институт ───────────────────────────────────────────────────────────
  79. #move(dx: shift.institute.dx, dy: shift.institute.dy)[
  80. #align(center)[#line_field(task.institute, [институт], width: 135mm)]
  81. ]
  82. #v(4mm)
  83. // ── Кафедра ────────────────────────────────────────────────────────────
  84. #move(dx: shift.department.dx, dy: shift.department.dy)[
  85. #align(center)[#line_field(task.department, [кафедра], width: 145mm)]
  86. ]
  87. #v(25mm)
  88. // ── Тип работы ─────────────────────────────────────────────────────────
  89. #move(dx: shift.work_type.dx, dy: shift.work_type.dy)[
  90. #align(center)[#text(size: 16pt, weight: "bold")[#task.work_type]]
  91. ]
  92. #v(8mm)
  93. // ── Тема («по» слева; тема центрирована по оси заголовка выше) ─────────
  94. #move(dx: shift.topic.dx, dy: shift.topic.dy)[
  95. #grid(
  96. columns: (1fr, 145mm, 1fr),
  97. column-gutter: 0pt,
  98. align: (right + top, center, left),
  99. [по],
  100. line_field(task.topic, [тема], width: 145mm),
  101. [],
  102. )
  103. ]
  104. #v(35mm)
  105. // ── Подписи ────────────────────────────────────────────────────────────
  106. // Одна таблица с общими колонками (как title_signature_block в
  107. // diploma-typst): черты для подписи и ФИО строго друг под другом.
  108. #move(dx: shift.signatures.dx, dy: shift.signatures.dy)[
  109. #table(
  110. columns: (34mm, 49mm, 8mm, 27mm, 11mm, 41mm),
  111. stroke: none,
  112. inset: (x: 0pt, y: 2.2mm),
  113. align: (left, center, center, center, center, center),
  114. // Преподаватель | (пусто) | подпись | (пусто) | ФИО
  115. table.cell(colspan: 2)[Преподаватель],
  116. [],
  117. blank_signature(width: 27mm),
  118. [],
  119. signature_name_field(task.teacher, width: 41mm),
  120. // Студент | номер группы | подпись | (пусто) | ФИО
  121. [Студент],
  122. signature_field(task.group, [номер группы, зачетной книжки], width: 49mm),
  123. [],
  124. blank_signature(width: 27mm),
  125. [],
  126. signature_name_field(task.student_short_name, width: 41mm),
  127. )
  128. ]
  129. // ── Город, год — центр физического листа, у нижнего поля ───────────────
  130. #context {
  131. // сдвиг к центру физического листа (поля 30/10 мм) + ручная подстройка
  132. let dx = (page.margin.right - page.margin.left) / 2 + shift.city.dx
  133. place(bottom + center, dx: dx, dy: shift.city.dy)[#task.city #task.year]
  134. }