#import "@preview/modern-g7-32:0.2.0": abstract, appendix-heading, appendixes, enum-numbering, gost

// Нумерация с использованием кириллицы
#set enum(numbering: enum-numbering)

#show: gost.with(
  ministry: "Наименование министерства (ведомства) или другого структурного образования, в систему которого входит организация-исполнитель",
  organization: (
    full: "Полное наименование организации — исполнителя НИР",
    short: "Сокращённое наименование организации",
  ),
  udk: "индекс УДК",
  research-number: "регистрационный номер НИР",
  report-number: "регистрационный номер отчета",
  approved-by: (
    name: "Фамилия И.О.",
    position: "Должность, наимен. орг.",
    year: 2017,
  ), // Гриф согласования
  agreed-by: (
    name: "Фамилия И.О.",
    position: "Должность, наимен. орг.",
    year: auto,
  ), // Гриф утверждения, год подставляется из аргумента year
  report-type: "отчёт",
  about: "О научно-исследовательской работе",
  research: "Наименование НИР",
  bare-subject: false, // Можно убрать "по теме"
  subject: "Наименование отчёта",
  manager: (
    name: "Фамилия И.О.",
    position: "Должность",
    title: "Руководитель НИР,",
  ), // Руководитель отчёта
  year: 2022,
  stage: (type: "вид отчёта", num: 1), // Этап отчёта
  federal: "Наименование федеральной программы",
  part: 2, // Номер книги отчёта
  city: "Город",
  text-size: (default: 14pt, small: 10pt), // Можно указать размеры текста
  indent: 1.25cm, // Можно указать отступ
  hide-title: false, // Убрать ли титульный лист
  title-footer-align: center, // Выравнивание города и года на титульном листе
  pagination-align: center, // Выравнивание номера страницы
  margin: (
    left: 30mm,
    right: 15mm,
    top: 20mm,
    bottom: 20mm,
  ), // Отступы страницы
  add-pagebreaks: true, // Убрать ли разрывы страниц
  performers: (
    "Всероссийский институт научной и технической информации " + "Российской академии наук (ВИНИТИ РАН)",
    // Можно указать организацию, к которой относятся следующие исполнители
    (
      name: "И.О. Фамилия",
      position: "Должность",
      part: "введение, раздел 1",
    ), // Можно добавить выполненную часть
    (name: "И.О. Фамилия", position: "Должность"),
    "Другая организация",
    (name: "И.О. Фамилия", position: "Должность"),
    (
      name: "И.О. Фамилия",
      position: "Должность",
      co-performer: true,
    ), // Поддерживаются соисполнители
  ), // Если исполнитель один - он будет перенесён на титульный лист
)

#abstract(
  "шаблон",
  "typst",
  "государственные стандарты",
  "оформление документов",
  "система вёрстки",
  "автоматизация",
)[
  Настоящий документ представляет собой описание шаблона modern-g7-32, разработанного для системы вёрстки #link(
    "https://typst.app/",
  )[typst] с целью автоматизации создания документов, соответствующих государственным стандартам. Шаблон упрощает
  процесс оформления, в частности, титульного листа, благодаря функции `gost.with`, которая позволяет гибко настраивать
  отображение информации и автоматически подставлять текущий год.

  В документе рассмотрены основные элементы шаблона, включая оформление таблиц, блоков кода и изображений, а также
  детально описана работа с аргументами функции `gost.with` для кастомизации титульной страницы. Представленный шаблон
  предназначен для пользователей системы typst, стремящихся к созданию стандартизированных документов с минимальными
  усилиями.
]

#outline()

= Введение

Шаблон modern-g7-32 предназначен для создания документов в строгом соответствии с ГОСТ. Он упрощает оформление
титульного листа, автоматизирует подстановку даты и позволяет легко управлять отображением информации.


= Документация шаблона Typst

Этот документ описывает особенности использования шаблона modern-g7-32 для системы вёрстки #link(
  "https://typst.app/",
)[typst]. Ниже приведены примеры оформления элементов, таких как таблицы, блоки кода и изображения, а также подробное
описание работы с аргументами шаблона через функцию `gost.with` @examplewebsite.

= Основные элементы шаблона

Шаблон modern-g7-32 позволяет создавать документы, оформленные в строгом соответствии с государственными стандартами.

== Таблицы

Для создания таблиц используется функция `table()`, обёрнутая в макрос `#figure` для добавления подписи. Пример показан
на таблице @example-table.

#figure(
  table(
    columns: 4,
    table.header([Заголовок 1], [Заголовок 2], [Т], [Заголовок 4]),
    [Проверка], [Проверка], [Проверка], [Проверка],
    [Проверка], [Проверка], [Проверка], [Проверка],
  ),
  caption: [Пример таблицы с данными],
) <example-table>

== Блоки кода

Чтобы оформить блоки кода в документе, можно использовать синтаксис, похожий на Markdown. Пример указан на листинге
@example-code:

#figure(
  ```typst
  // Пример кода на Typst:
  #import "package.typ"

  // Функция вывода сообщения
  print("Hello, world!")
  ```,
  caption: [Пример кода на Typst],
) <example-code>

Этот блок кода демонстрирует базовую структуру программы на Typst.

#pagebreak()

== Формулы

Чтобы оформить формулы в документе, можно использовать синтаксис typst-math. Примеры демонстрируют использование формул
в шаблоне:

Формула @example-formula-first показывает как применять сложные функции, формула @example-formula-second демонстрирует
как можно оформить матрицы, а формула @example-formula-third – использование типов и обозначений @ivanov2020osnovy.


$ sum_(k=0)^n k = 1 + ... + n = (n(n+1)) / 2 $
<example-formula-first>


$ mat(1, 2, 3; 4, 5, 6; 7, 8, 9) * x = pi * psi(aleph/x) $
<example-formula-second>

$ cal(A) := { x in RR | x "натуральное" } $
<example-formula-third>

== Изображения

Изображения добавляются с помощью функции `image()` внутри макроса `#figure`. Пример вставки изображения указан на
рисунке @example-image.

#figure(
  image("images/home.jpg", width: 40%),
  caption: "Пример изображения",
) <example-image>

= Работа с аргументами шаблона в gost.with

Функция `gost.with` принимает множество аргументов, позволяющих настраивать титульную страницу и другие элементы
документа.

Рассмотрим основные возможности:

- Обязательные и необязательные аргументы. Многие параметры могут быть опущены, если вы не хотите, чтобы соответствующая
  информация отображалась на титульном листе.
- Параметр auto (автоматический год). В аргументах, таких как `approved-by.year` или `year`, можно использовать значение
  `auto`.

- Примеры аргументов: В заголовке шаблона задаются такие параметры, как:
  + `ministry-name` – название министерства.
  + `organization` – информация об учреждении (полное и сокращённое наименования).
  + `performers` – список исполнителей с указанием их позиций.

== Работа с аргументами шаблона <with-numbering>

Как уже отмечалось, функция `gost.with` позволяет детально настраивать титульную страницу. Рассмотрим ключевые моменты:

- При передаче параметра `year: auto` текущий год будет вычисляться автоматически.
- Если не требуется выводить определённый элемент (например, номер инвентаризации), соответствующий аргумент можно не
  указывать.
- Все аргументы передаются в виде именованных параметров, что обеспечивает гибкость конфигурации.

= Заключение <conclusion>

Шаблон modern-g7-32 для Typst значительно упрощает подготовку документов, соответствующих государственным стандартам. Он
обеспечивает удобное создание таблиц, блоков кода и изображений, а гибкая настройка через функцию `gost.with` позволяет
автоматически подставлять дату и исключать ненужные элементы с титульной страницы. Используйте данный шаблон для
создания качественных и стандартизированных документов @petrov2021analiz.

#bibliography("references.bib")

#show: appendixes

= Изображения в приложениях
Пример вставки изображения в приложение указан на рисунке @appendix-image.

#figure(
  image("images/nature.jpg", width: 40%),
  caption: "Пример изображения",
) <appendix-image>

== Изображения в под-приложениях
Пример вставки изображения в под-приложение указан на рисунке @appendix-image-3. #figure(
  image("images/abstract.jpg", width: 40%),
  caption: "Пример изображения",
) <appendix-image-3>

= Блоки кода
Чтобы оформить блоки кода в документе, можно использовать синтаксис, похожий на Markdown. Пример указан на листинге
@appendix-code:

#figure(
  ```typst
  // Пример кода на Typst:
  #import "package.typ"

  // Функция вывода сообщения
  print("Hello, world!")
  ```,
  caption: [Пример кода на Typst],
) <appendix-code>

= Формулы
Чтобы оформить формулы в документе, можно использовать синтаксис typst-math. Примеры демонстрируют использование формул
в шаблоне:

$ sum_(k=0)^n k = 1 + ... + n = (n(n+1)) / 2 $ <appendix-formula>

как оформлять таблицы сказано в приложении @appendix-tables, а также в разделе с нумерацией @with-numbering.

== Таблицы <appendix-tables>
Для создания таблиц используется функция `table()`, обёрнутая в макрос `#figure` для добавления подписи. Пример показан
на таблице @appendix-table.

#figure(
  table(
    columns: 4,
    table.header([Заголовок 1], [Заголовок 2], [Заголовок 3], [Заголовок 4]),
    [Проверка], [Проверка], [Проверка], [Проверка],
    [Проверка], [Проверка], [Проверка], [Проверка],
  ),
  caption: [Пример таблицы с данными],
) <appendix-table>

#appendix-heading("справочное", level: 1)[Приложение с указанием статуса]
#lorem(100)

#appendix-heading("справочное", level: 2)[Приложение второго уровня со статусом]
#lorem(100)
