Florilegium добавляет в LuaLaTeX-документы процедурные цветочные композиции в стиле Delft blue. Пакет не использует готовые изображения, импортированные контуры или внешние assets: каждый лепесток, лист и стебель вычисляется в Lua как параметрическая кривая и записывается прямо в PDF. Автор не пытается точно воспроизвести найденный на Reddit пример, а предлагает собственную реализацию похожего визуального подхода.
Есть два режима. Authored размещает стебли, листья и цветы по заранее выбранным точкам, но случайно меняет параметры мотивов. Grown самостоятельно заполняет свободное поле страницы. После первичного роста стеблей жадный цикл ищет наибольший свободный круг в пределах досягаемости, подбирает подходящий мотив и проводит к нему новую ветвь от ближайшей точки. Крупные пустоты заполняются первыми, затем мелкие детали закрывают оставшиеся промежутки. Идея основана на работе Wong, Zongker и Salesin о floral ornament с SIGGRAPH 1998.
Композиция учитывает текст. Высота \pagetotal позволяет ветвям последней страницы занять место под коротким заключительным абзацем за одну компиляцию. Заголовки и команда \florilegiumbloom оставляют невидимые маркеры, рядом с которыми при shipout появляются цветы. Декоративная буквица строится из OpenType-контура: лиана поочерёдно проходит над и под штрихами, а невидимый текст сохраняет корректное копирование абзаца.
Опция aging меняет набор мотивов от весны на первой странице к осени на последней: бутоны уступают место семенным коробочкам и опадающим лепесткам. Для этого нужны два прогона, чтобы узнать число страниц. Бабочки, пчёлы, улитка и иногда птица используют отдельный random stream, поэтому их отключение не меняет растительную композицию.
Вся палитра выводится из одного цвета ink в OKLCH, благодаря чему светлые мазки не становятся серыми. Акварельный эффект создают базовая заливка, тёмные пятна, скопление пигмента по краям, белые полосы и тонкие прожилки почти без контуров. Seed зависит от номера страницы, поэтому повторная сборка воспроизводит тот же сад.
Пакет также умеет записывать рост в GIF и MP4 и включает самодостаточную PostScript-версию, работающую без TeX. На обычном PostScript-принтере прозрачность заменяется предварительно смешанными непрозрачными цветами, а одинаковый seed может дать другой сад из-за отличий арифметики.
Обычная LuaLaTeX-сборка занимает около секунды на страницу. Проект распространяется по MIT и может работать локально, в Docker или Overleaf; отдельные мотивы доступны внутри TikZ scope.