Vibe Coding на стероидах: как Pandoc Lua Filters превращают Markdown в готовый документ за секунды

Привет! Я последние полгода плотно сижу на 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 секунды. Раньше на это уходило полдня.

Как начать: мой чек-лист для новичка

  1. Установи Pandoc (pandoc.org/installing.html) — есть для Windows, macOS, Linux.
  2. Установи Lua (lua.org) — если Pandoc собран с поддержкой Lua (в стандартной сборке есть).
  3. Напиши первый фильтр — хотя бы тот, что меняет цвет заголовков.
  4. Запусти: 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 с фильтрами превращает в готовый документ. Всё автоматизировано и без рутины.

← Все статьи

Комментарии