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

105 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# md2gost
Конвертер Markdown в LaTeX по ГОСТ Р 7.0.5-2008. Генерирует PDF-отчёты с титульным листом, содержанием, нумерацией и форматированием по ГОСТ.
## Установка
Требуется Docker. Локальная установка LaTeX не нужна.
```bash
docker build -t md2gost .
```
## Использование
```bash
./md2gost.sh report.md -o ./build
```
Скрипт создаст `build/report.tex` и `build/report.pdf`.
### Флаги
- `-o dir` -- выходная директория (по умолчанию `./build`)
- `--no-pdf` -- только .tex, без компиляции
## Формат Markdown
Используется front matter в начале файла:
```yaml
---
факультет: Информатика и системы управления
кафедра: Программные средства
тип: Отчёт по практике
название: Исследование алгоритмов оптимизации
студент: Иванов И.И.
преподаватель: Петров П.П.
группа: ИУ1-12
год: 2026
---
```
Обязательные поля: `название`, `тип`.
### Поддерживаемые элементы
- Заголовки (1-3 уровень) с нумерацией
- Параграфы, списки (маркированные и нумерованные)
- Таблицы
- Код с подсветкой синтаксиса
- Изображения (см. ниже)
- Аббревиатуры (раздел "Перечень принятых сокращений")
- Ссылки, жирный, курсив
### Изображения
Рисунок — вики-ссылка отдельным абзацем; подпись — следующий абзац вида
`Рисунок N <тире> Название` (номер отбрасывается, LaTeX нумерует сам):
```markdown
![[images/antenna.png]]
Рисунок 1 —— Антенна
Данная антенна используется для ...
```
Ширина задаётся суффиксом `|N` (доля от ширины текста):
```markdown
![[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
```
## Команды
```bash
make build # сборка Docker-образа
make run # сборка + конвертация report.md
make format # форматирование кода (black + ruff)
make tidy # статический анализ (ruff + mypy)
make test # pytest
```