lint-gost-tex 0.1.1
LaTeX linter for GOST-styled documents.
License: MIT
Requires Python: <4.0,>=3.11
Keywords: latex, gost, linter, tex

# lint-gost-tex

[![status-badge](https://woodpecker.dev.nachert.art/api/badges/9/status.svg)](https://woodpecker.dev.nachert.art/repos/9)

Линтер LaTeX‑документов под требования ГОСТ: проверяет оформление ссылок, списков,
иллюстраций, запрещённые сокращения, нестандартные символы и орфографию.

## Возможности
- проверка `\includegraphics` на фиксированную ширину;
- пробелы перед `\ref/\eqref/\autoref/...` (неразрывный `~`);
- пунктуация вокруг ссылок;
- запрет подчеркиваний/курсива;
- правила для списков (вложенность, пунктуация, регистр);
- подписи к рисункам/таблицам;
- порядок иллюстраций относительно первого упоминания;
- орфография (RU/EN) и запрет «пиксель»;
- контроль не‑клавиатурных символов.

## Установка
```bash
pip install lint-gost-tex
```

## Быстрый старт
```bash
lint-gost-tex --root main.tex
```

или через модуль:
```bash
python -m lint_gost_tex --root main.tex
```

По умолчанию линтер ищет конфиг `lint-gost-tex.toml` в текущей директории.
Другой файл можно указать явно:
```bash
lint-gost-tex --config path/to/config.toml
```

## Конфигурация
Пример конфига: `examples/lint-gost-tex.toml`.

1) Скопируйте конфиг в корень проекта:
```bash
cp examples/lint-gost-tex.toml ./lint-gost-tex.toml
```

2) Скопируйте шаблоны словарей:
```bash
mkdir -p dictionaries
cp examples/dictionaries/*.txt ./dictionaries/
```

### Важные параметры
- `document.root` — корневой `.tex` файл.
- `document.exclude` — исключения (по имени файла или glob).
- `spellcheck.custom_dict` — пользовательский словарь.
- `spellcheck.extra_ru_dicts` — русские словари (обязательно для RU‑проверки).
- `spellcheck.extra_en_dicts` — дополнительные EN‑словари.

Если русских/английских словарей нет, линтер выдаст предупреждение `SPELL000`.

## Ограничения
- `\include` и `\input` учитываются только из корневого файла (без рекурсии).
- Проверка орфографии требует явных словарей для русского языка.

## Список правил
- `IMG001` — `\includegraphics` должен использовать заданную ширину.
- `REF001` — перед ссылками нужен ровно один `~`.
- `REF002` — ссылки должны стоять перед завершающей пунктуацией.
- `TXT001` — запрет курсивов/подчеркиваний.
- `LST001` — запрет кастомных окружений списков/лейблов.
- `LST002` — запрет вложенных списков.
- `LST003` — пунктуация элементов списка.
- `LST004` — в элементе списка только одно предложение.
- `LST005` — элементы списка не должны начинаться с заглавной буквы.
- `CAP001` — подписи не должны оканчиваться пунктуацией.
- `ILL001` — иллюстрация появляется раньше первого упоминания.
- `ILL002` — иллюстрация не имеет ссылок.
- `ABBR001` — запрещённые сокращения (ГОСТ).
- `UNIC001` — запрет не‑клавиатурных символов.
- `SPELL000` — нет словарей для проверки.
- `SPELL001` — неизвестное слово.
- `SPELL002` — запрещённое слово «пиксель».
- `SPELL003` — требуется «ё» вместо «е».

## Формат вывода
```
path:line:col [RULE_ID] message
  | source line
  |    ^
```

## Коды выхода
- `0` — ошибок нет.
- `1` — найдены проблемы.

## Разработка
```bash
poetry install
poetry run lint-gost-tex --root main.tex
```

## Лицензия
MIT. См. `LICENSE`.