2026-07-16 09:00:24 +03:00
|
|
|
|
# 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 уровень) с нумерацией
|
|
|
|
|
|
- Параграфы, списки (маркированные и нумерованные)
|
|
|
|
|
|
- Таблицы
|
|
|
|
|
|
- Код с подсветкой синтаксиса
|
2026-08-25 13:58:01 +03:00
|
|
|
|
- Изображения (см. ниже)
|
2026-07-16 09:00:24 +03:00
|
|
|
|
- Аббревиатуры (раздел "Перечень принятых сокращений")
|
|
|
|
|
|
- Ссылки, жирный, курсив
|
|
|
|
|
|
|
2026-08-25 13:58:01 +03:00
|
|
|
|
### Изображения
|
|
|
|
|
|
|
|
|
|
|
|
Рисунок — вики-ссылка отдельным абзацем; подпись — следующий абзац вида
|
|
|
|
|
|
`Рисунок N <тире> Название` (номер отбрасывается, LaTeX нумерует сам):
|
|
|
|
|
|
|
|
|
|
|
|
```markdown
|
|
|
|
|
|
![[images/antenna.png]]
|
|
|
|
|
|
|
|
|
|
|
|
Рисунок 1 —— Антенна
|
|
|
|
|
|
|
|
|
|
|
|
Данная антенна используется для ...
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Ширина задаётся суффиксом `|N` (доля от ширины текста):
|
|
|
|
|
|
|
|
|
|
|
|
```markdown
|
|
|
|
|
|
![[images/scheme.png|50]]
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Файлы картинок копируются в каталог компиляции автоматически; эмблема
|
|
|
|
|
|
титульного листа ищется рядом со входным файлом или берётся из пакета.
|
|
|
|
|
|
Картинка внутри текстового абзаца не поддерживается (по ГОСТ рисунок
|
|
|
|
|
|
оформляется отдельным абзацем) и пропускается с предупреждением.
|
|
|
|
|
|
|
2026-07-16 09:00:24 +03:00
|
|
|
|
## Структура проекта
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
md2gost/
|
|
|
|
|
|
md2gost/
|
|
|
|
|
|
main.py # точка входа
|
2026-08-25 13:58:01 +03:00
|
|
|
|
parser.py # парсинг markdown (+ вики-ссылки картинок)
|
|
|
|
|
|
registry.py # реестры block/pattern/inline обработчиков
|
|
|
|
|
|
render.py # проход по токенам и диспетчеризация
|
|
|
|
|
|
handlers/ # обработчики блоков (декораторы @block/@pattern/@inline)
|
2026-07-16 09:00:24 +03:00
|
|
|
|
latex/ # преамбула, титульный лист
|
2026-08-25 13:58:01 +03:00
|
|
|
|
tests/ # pytest
|
2026-07-16 09:00:24 +03:00
|
|
|
|
md2gost.sh # обёртка для Docker
|
|
|
|
|
|
Dockerfile
|
|
|
|
|
|
Makefile
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Команды
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
make build # сборка Docker-образа
|
|
|
|
|
|
make run # сборка + конвертация report.md
|
|
|
|
|
|
make format # форматирование кода (black + ruff)
|
|
|
|
|
|
make tidy # статический анализ (ruff + mypy)
|
2026-08-25 13:58:01 +03:00
|
|
|
|
make test # pytest
|
2026-07-16 09:00:24 +03:00
|
|
|
|
```
|