Привет! Я последние полгода плотно сижу на vibe coding — когда нейросеть генерирует код, а ты только направляешь. Но есть одна проблема: AI отлично пишет Markdown, а заказчикам нужны DOCX, PDF, а иногда и HTML с кастомной вёрсткой. Раньше я тратил часы на конвертацию. Пока не открыл для себя Pandoc Lua Filters. Это буквально спасло мой проджект-менеджмент.
Что такое Pandoc и почему Lua Filters — это магия
Pandoc — это швейцарский нож конвертации документов. Он умеет превращать Markdown в DOCX, PDF, EPUB, HTML, LaTeX и ещё десятки форматов. Всё это бесплатно, open-source и работает из командной строки. Но фишка в том, что Pandoc позволяет писать фильтры на Lua — скрипты, которые модифицируют документ прямо во время конвертации.
Представьте: вы пишете статью в Markdown, а Pandoc сам расставляет переносы, форматирует заголовки, вставляет правильные колонтитулы и даже генерирует оглавление. Lua Filters дают полный контроль над каждым элементом документа — от параграфа до изображения.
Мой первый кейс: проблема с заголовками
Я веду блог на Asibiont и часто публикую длинные гайды. Заказчики просят прислать DOCX с определённым форматированием: заголовки H2 — синим цветом, H3 — курсивом, а все ссылки должны быть синими и подчёркнутыми. Раньше я правил это руками в Word — 15-20 минут на документ.
Написал простой Lua Filter:
function Header(el)
if el.level == 2 then
-- Добавляем синий цвет
table.insert(el.content, 1, pandoc.RawInline('latex', '\\textcolor{blue}{'))
table.insert(el.content, pandoc.RawInline('latex', '}'))
end
return el
end
Теперь Pandoc сам красит заголовки. Скрипт занял 10 строк, а экономит мне час в неделю.
Как это работает под капотом
Pandoc представляет документ как AST (Abstract Syntax Tree) — древовидную структуру, где каждый элемент (заголовок, параграф, ссылка) — это узел. Lua Filter перехватывает эти узлы и может их изменять, удалять или добавлять новые.
Официальная документация Pandoc (pandoc.org/lua-filters.html) описывает более 50 типов элементов, которые можно обрабатывать: Header, Para, Link, Image, CodeBlock, Table, BulletList и другие.
Пример с таблицами. У меня в Markdown часто встречаются таблицы с данными. В HTML они выглядят отлично, но в DOCX — ужасно: границы не там, шрифт мелкий. Написал фильтр, который автоматически задаёт ширину колонок и добавляет заливку заголовка:
function Table(el)
-- Задаём ширину колонок равномерно
local num_cols = #el.columns
if num_cols > 0 then
local width = 100 / num_cols
for i, col in ipairs(el.columns) do
el.columns[i].width = width
end
end
return el
end
Реальный кейс: генерация технической документации
Недавно мы делали документацию для API. У нас было 50+ Markdown-файлов с описанием эндпоинтов. Заказчик хотел получить один PDF с оглавлением, нумерацией страниц и единым стилем.
Pandoc собрал все файлы в один документ:
pandoc *.md -o documentation.pdf --pdf-engine=xelatex --lua-filter=format.lua
A Lua Filter сделал следующее:
- Проверил, что все заголовки H1 — это названия разделов, и добавил их в оглавление
- Для каждого эндпоинта (H2) автоматически вставил блок кода с примером запроса
- Заменил все ссылки вида [GET /users] на форматированные команды
Результат: 50 файлов превратились в 30-страничный PDF за 2 секунды. Раньше на это уходило полдня.
Как начать: мой чек-лист для новичка
- Установи Pandoc (pandoc.org/installing.html) — есть для Windows, macOS, Linux.
- Установи Lua (lua.org) — если Pandoc собран с поддержкой Lua (в стандартной сборке есть).
- Напиши первый фильтр — хотя бы тот, что меняет цвет заголовков.
- Запусти:
pandoc input.md -o output.docx --lua-filter=myfilter.lua
Три лайфхака, которые я использую каждый день
1. Автоматическая проверка ссылок
Фильтр проверяет, что все ссылки ведут на HTTPS, а не HTTP. Если найдёт HTTP — выводит предупреждение. Это спасло меня от опечаток, когда я копировал ссылки из AI-генераций.
2. Добавление мета-данных
Pandoc поддерживает YAML-метаданные в начале файла. Фильтр может читать оттуда автора, дату и вставлять их в колонтитулы DOCX.
---
title: "Гайд по Lua Filters"
author: "Команда Asibiont"
date: 2026-07-05
---
3. Кастомные блоки для AI-контента
Я использую Markdown с кастомными классами:
::: {.ai-note}
Этот текст сгенерирован нейросетью и требует проверки.
:::
Фильтр находит такие блоки и делает их жёлтым фоном. Удобно, когда в статье есть и AI-сгенерированные, и рукописные части.
Сравнение с альтернативами
| Инструмент | Гибкость | Скорость | Бесплатно | Поддержка Lua |
|---|---|---|---|---|
| Pandoc + Lua Filters | Высокая | Очень высокая | Да | Да |
| Microsoft Word | Низкая | Низкая | Нет | Нет |
| Google Docs | Средняя | Средняя | Да | Нет |
| LaTeX | Очень высокая | Низкая | Да | Нет |
| md-to-pdf (npm) | Средняя | Высокая | Да | Нет |
Pandoc выигрывает, когда нужно автоматизировать рутину и при этом сохранить полный контроль.
Почему это идеально для vibe coding
Vibe coding — это когда AI пишет код, а ты проверяешь и комбинируешь. Lua Filters идеально ложатся в эту парадигму:
- AI отлично генерирует Lua-код (язык простой, синтаксис понятный)
- Фильтры небольшие — 10-50 строк, легко проверить глазами
- Можно быстро итерировать: скормить AI описание задачи, получить фильтр, протестировать
Например, я попросил AI: "Напиши Lua Filter, который все изображения в Markdown оборачивает в фигуры с подписями". Через 30 секунд получил рабочий скрипт. Да, пришлось поправить пару багов, но это заняло 5 минут вместо часа ручной работы.
Заключение
Pandoc Lua Filters — это тот инструмент, про который мало кто знает, но который реально экономит часы. Если вы работаете с Markdown, конвертируете документы или используете AI для генерации контента — попробуйте. Начните с простого скрипта, который меняет цвет заголовков. Вы удивитесь, как быстро это войдёт в привычку.
Полезные ссылки для старта:
- Официальная документация Pandoc: pandoc.org/lua-filters.html
- Репозиторий примеров фильтров: github.com/pandoc/lua-filters
- Моя подборка из 10 фильтров для ежедневной работы (пишите в комментариях — скину ссылку)
P.S. Если вы используете Asibiont для управления контентом, то Pandoc отлично интегрируется в пайплайн: вы пишете в Markdown, AI генерирует черновик, Pandoc с фильтрами превращает в готовый документ. Всё автоматизировано и без рутины.
Комментарии