Files
SSAUGenerator/pptx/AGENTS.md
StepanovPlaton bf7816ab7c Rename project to SSAU Generator and restructure content
- Move projects into content/<project>/{docx,pptx} with shared assets/
- Flatten config paths; output = project name in project folder
- Add pptx --init scaffold; remove docx exe build
- Add feature-complete content/example; ignore content/* except example
- Rewrite README and AGENTS.md
2026-10-11 23:25:22 +04:00

240 lines
11 KiB
Markdown
Raw Permalink 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.
# AGENTS.md — работа с презентацией PPTX
Генератор `pptx/` собирает презентацию **PPTX** из обычных **Markdown**-файлов по
шаблону Самарского университета. Этот файл — инструкция агенту по созданию и
правке конкретной презентации. Поведение задаётся `config.yaml` проекта, менять код
генератора не нужно.
## 1. Требования
- Node.js 18+, зависимости ставятся командой `npm install` в папке `pptx/`.
- Зависимости: `pptxgenjs`, `js-yaml`.
- Для директив `::: image` с файлами `.puml` — Java 11+ (из `JAVA_HOME`, иначе
`java` из PATH) и файл `plantuml.jar` (см. `config.plantuml`).
## 2. Раскладка проекта
Проект лежит в `content/<проект>/pptx/` рядом с `config.yaml`:
```
content/<проект>/
├── assets/ # общие ресурсы проекта (общие с docx)
│ ├── title-bg.jpeg # задники
│ ├── content-bg.jpg
│ ├── final-bg.jpeg
│ └── images/ # готовые PNG/JPEG и исходники .puml
└── pptx/
├── config.yaml
└── slides/
├── 00-title.md
└── 01-*.md
```
Все относительные пути считаются **от каталога `config.yaml`**. Общие с документом
ресурсы указывайте через `../assets` (например,
`backgrounds.title: ../assets/title-bg.jpeg`). Каталог контента — ключ
`content.dir` (по умолчанию `.` — папка самого `config.yaml`).
Презентация собирается в папку проекта и называется по имени проекта:
`content/<проект>/<проект>.pptx`. Значение ключа `presentation.output` при такой
раскладке — `../<проект>.pptx`.
Структуру проекта создавайте командой `--init`: она формирует `config.yaml`,
примеры слайдов и общий каталог `content/<проект>/assets/` (задники), который
используется и генератором `docx`.
Готовый пример со всеми возможностями — `content/example/pptx/`.
## 3. Командная строка
Из корня репозитория:
```
node pptx/src/cli.js [config.yaml] [опции]
-c, --config <file> путь к config.yaml (по умолчанию config.yaml)
-o, --output <file> переопределить имя выходного файла
--check только проверить конфиг и ссылки
--init создать шаблон config.yaml/slides/assets и выйти
-v, --verbose подробный вывод
-h, --help справка
--version версия
```
Типичный цикл:
```powershell
node pptx/src/cli.js -c content/<проект>/pptx/config.yaml --init # создать структуру проекта
node pptx/src/cli.js -c content/<проект>/pptx/config.yaml --check # проверить
node pptx/src/cli.js -c content/<проект>/pptx/config.yaml # собрать
```
После любого изменения исходников (`config.yaml`, слайдов, ресурсов `assets/`)
**пересоберите презентацию**, чтобы результат соответствовал исходникам.
Если `config.yaml` не найден, инструмент сам создаёт шаблон (`config.yaml`,
примеры слайдов и общий `assets/`) и завершается.
## 4. Схема `config.yaml`
| Раздел | Назначение |
|---|---|
| `presentation` | `output`, `author`, `track` |
| `theme` | `width`/`height` (дюймы), `font`, `colors`, `backgrounds`, `slideNumber` |
| `text` | макеты текста для типов `titleSlide`, `section`, `content`, `final` |
| `table` | размер шрифта, цвета шапки/ячеек/границ |
| `callout` | плашка-вывод: заливка, рамка, цвета и размеры шрифтов |
| `metrics` | карточки-метрики: заливка, цвета, размеры значения и подписи |
| `flow` | схема-цепочка: заливка, рамка, стрелки, размер |
| `chart` | палитра, размер шрифта, легенда, высота диаграммы |
| `plantuml` | рендеринг `*.puml` (см. п. 5) |
| `content.dir` | каталог контента (по умолчанию `.`) |
| `slides` | список слайдов: `{ type, file }` |
Типы слайдов: `title`, `section`, `content`, `final`. Каждому типу соответствует
макет (`slideMaster`) с собственным фоном:
| type | Фон | Оформление |
|---|---|---|
| `title` | `title-bg.jpeg` | синий, белый текст в правой половине |
| `section` | `title-bg.jpeg` | разделитель, крупный белый текст справа |
| `content` | `content-bg.jpg` | белый лист, заголовок в верхней синей плашке |
| `final` | `final-bg.jpeg` | синий, белый текст справа |
Номер слайда выводится в правом нижнем углу для `content` и `section`.
## 5. Формат слайда (Markdown)
```md
# Заголовок слайда -> заголовок
## Подзаголовок -> подзаголовок (для title/final)
- пункт списка -> маркер
- вложенный пункт -> вложенный маркер
Обычный абзац. **Жирный** текст, *курсив*, ==выделение== и `код`
поддерживаются в абзацах, пунктах и ячейках таблиц.
::: table
| Столбец A | Столбец B |
|---|---|
| 1 | 2 |
:::
::: image ../assets/images/pic.png
подпись под рисунком
:::
::: notes
Заметки докладчика (используются как сценарий выступления).
:::
```
### Богатое форматирование текста
В абзацах, пунктах списка и ячейках таблиц работает inline-разметка:
| Разметка | Результат |
|---|---|
| `**текст**` | полужирный |
| `*текст*` | курсив |
| `==текст==` | акцентный (брендовый) полужирный |
| `` `текст` `` | моноширинный (Consolas) |
Пункты списка рисуются с висячим отступом, поэтому многострочные пункты с
форматированием сохраняют маркер и выравнивание.
### Директива `::: callout "Заголовок"`
Плашка-вывод с заливкой и рамкой. Внутри — абзацы и/или пункты списка:
```md
::: callout "Итог"
Рынок проверяется ==дешёвым инкрементом==, а не дорогим запуском.
:::
```
Параметр `side=left|right` ставит плашку в левую или правую колонку слайда.
Если у слайда есть блоки с `side`, они верстаются в две колонки, а остальные
блоки — как обычно. Не смешивайте на одном слайде обычный текст и колонки
(`side`) — они накладываются.
### Директива `::: metrics`
Карточки-метрики (до четырёх). Каждая строка — `Значение | Подпись`
(допускается разделитель `—`):
```md
::: metrics
70% | новых товаров уходят с рынка
10 | сфер применения метода
:::
```
### Директива `::: flow`
Схема-цепочка из скруглённых блоков со стрелками. Шаги разделяются `->` (или `→`):
```md
::: flow
Sprint Planning -> Спринт -> Sprint Review -> Ретроспектива
:::
```
Если блоки становятся слишком узкими, схема автоматически разворачивается
вертикально.
### Директива `::: chart <тип> "Заголовок"`
Диаграмма на основе GFM-таблицы: первая колонка — категории, остальные —
числовые ряды (заголовки колонок = имена рядов). Типы: `bar`, `bar3d`, `line`,
`pie`, `doughnut`, `area`, `radar`, `scatter`.
```md
::: chart doughnut "Новинки, которые не выживают"
| Итог | Доля, % |
|---|---|
| Успешные новинки | 30 |
| Уходят с рынка | 70 |
:::
```
### Директива `::: image` и PlantUML
`file` — относительно `content.dir`. Если файл оканчивается на `.puml`
(`.plantuml`, `.pu`, `.iuml`), он рендерится в PNG через `plantuml.jar` и
вставляется как обычный рисунок:
```md
::: image ../assets/images/scrum-cycle.puml height=3.2
Цикл Scrum: от Product Backlog до масштабирования товара
:::
```
Подпись (строка под директивой) выводится под рисунком курсивом. Растровые
PNG/JPEG вставляются как есть. Параметр `height=<дюймы>` (`h=`) ограничивает
высоту рисунка (пропорции сохраняются, рисунок центрируется). `side=left|right`
ставит рисунок в колонку.
## 6. Задники
Задники лежат в общем каталоге ресурсов проекта
(`content/<проект>/assets/`: `title-bg.jpeg`, `content-bg.jpg`, `final-bg.jpeg`).
При замене шаблона положите новые файлы и обновите пути в `theme.backgrounds`.
## 7. Шрифт
В исходном шаблоне используется фирменный `Elektra Text Pro`, который обычно не
установлен в системе. Поэтому по умолчанию задан `Segoe UI` — близкий современный
sans. Альтернативы: `Calibri`, `Candara`, `Corbel`, `Noto Sans`, `Arial`.
Смените `theme.font` при необходимости.
## 8. Проверка результата
`--check` проверяет конфиг и наличие слайдов/ресурсов. Презентацию можно
отрендерить для визуальной проверки через LibreOffice:
```powershell
soffice --headless --convert-to pdf --outdir . presentation.pptx
```