Arseny b1d00a1fed [ADD] раздел ПРИЛОЖЕНИЕ и листинги длиннее страницы
ПРИЛОЖЕНИЕ добавлено к ненумерованным разделам с новой страницы и попадает
в содержание наравне с введением и заключением.

Листинг длиннее страницы больше не оборачивается в плавающий объект: LaTeX
не смог бы его разместить и вынес бы в конец документа. Рамка у такого
листинга снимается — она всё равно обрывается на границе страницы.

В приложении не плавает ни один листинг независимо от длины: там они идут
подряд и без текста вокруг, а плавающий объект переставлял короткий листинг
за длинный и ломал порядок. Чтобы обработчик знал раздел, составные
обработчики теперь получают рендерер — как и блочные.

Имя ненумерованного раздела ищется в исходном тексте, а не в готовом LaTeX:
у выделенного «==ПРИЛОЖЕНИЕ==» готовый текст — это \hlw{ПРИЛОЖЕНИЕ}, и
раздел нумеровался как обычный.
2026-09-07 17:48:59 +03:00
2026-07-15 22:30:56 +03:00

md2gost

Конвертер Markdown в LaTeX по ГОСТ Р 7.0.5-2008. Генерирует PDF-отчёты с титульным листом, содержанием, нумерацией и форматированием по ГОСТ.

Установка

Требуется Docker. Локальная установка LaTeX не нужна.

docker build -t md2gost .

Использование

./md2gost.sh report.md -o ./build

Скрипт создаст build/report.tex и build/report.pdf.

Флаги

  • -o dir -- выходная директория (по умолчанию ./build)
  • --no-pdf -- только .tex, без компиляции

Формат Markdown

Используется front matter в начале файла:

---
факультет: Информатика и системы управления
кафедра: Программные средства
тип: Отчёт по практике
название: Исследование алгоритмов оптимизации
студент: Иванов И.И.
преподаватель: Петров П.П.
группа: ИУ1-12
год: 2026
---

Обязательные поля: название, тип.

Поддерживаемые элементы

  • Заголовки (1-3 уровень) с нумерацией
  • Параграфы, списки (маркированные и нумерованные)
  • Таблицы
  • Код с подсветкой синтаксиса
  • Изображения (см. ниже)
  • Аббревиатуры (раздел "Перечень принятых сокращений")
  • Ссылки, жирный, курсив
  • Пометка правок ==текст== — жёлтое выделение для рецензента

Изображения

Рисунок — вики-ссылка отдельным абзацем; подпись — следующий абзац вида Рисунок N <тире> Название (номер отбрасывается, LaTeX нумерует сам):

![[images/antenna.png]]

Рисунок 1 —— Антенна

Данная антенна используется для ...

Ширина задаётся суффиксом |N (доля от ширины текста):

![[images/scheme.png|50]]

Файлы картинок копируются в каталог компиляции автоматически; эмблема титульного листа ищется рядом со входным файлом или берётся из пакета. Картинка внутри текстового абзаца не поддерживается (по ГОСТ рисунок оформляется отдельным абзацем) и пропускается с предупреждением.

Структура проекта

md2gost/
  md2gost/
    main.py          # точка входа
    parser.py        # парсинг markdown (+ вики-ссылки картинок)
    registry.py      # реестры block/pattern/inline обработчиков
    render.py        # проход по токенам и диспетчеризация
    handlers/        # обработчики блоков (декораторы @block/@pattern/@inline)
    latex/           # преамбула, титульный лист
  tests/             # pytest
  md2gost.sh         # обёртка для Docker
  Dockerfile
  Makefile

Команды

make build    # сборка Docker-образа
make run      # сборка + конвертация report.md
make format   # форматирование кода (black + ruff)
make tidy     # статический анализ (ruff + mypy)
make test     # pytest
S
Description
No description provided
Readme 1,009 KiB
Languages
Python 97.4%
Shell 1.6%
Dockerfile 0.7%
Makefile 0.3%