Files
md2gost/README.md
T
Arseny 8a921e2337 [ADD] поддержка изображений и рефакторинг диспетчера токенов
- registry.py: реестры BLOCK/PATTERNS/INLINE с декораторами @block/@pattern/@inline
- render.py: единый диспетчер, слой паттернов, проверка контракта pos (RuntimeError),
  pending_toc вместо current_heading для единственной вставки СОДЕРЖАНИЯ
- handlers/image.py: вики-ссылки ![[путь|ширина]], подпись Рисунок N —— ... ,
  figure-окружение, авто-нумерация, копирование файлов в tmpdir
- handlers/inline.py: табличная диспетчеризация вместо if/elif
- Все block-обработчики подписаны @block, корректно продвигают pos
- parser.py: препроцессинг ![[...]] → ![](path), iter_image_sources()
- main.py: _copy_assets (emblem+картинки в tmpdir), фикс лога (имя .tex),
  cwd=tmpdir для xelatex, цикл вместо дублирования, force-include emblem
- tests/test_render.py: pytest (10 тестов), pyproject dev-dep, make test
- preamble.py: name=Рисунок для figure-caption (было Рис. от babel)
- Исправлены баги: мёртвый обработчик, emblem не копировалась,
  множественный TOC, захардкожен report.log, маскировка pos
- README/AGENTS.md обновлены
2026-08-25 13:58:01 +03:00

3.7 KiB
Raw Blame History

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