AIとLuaで実現するLaTeXの新たな表現「Florilegium」
GitHubで公開された「Florilegium」は、LaTeXドキュメントのページ余白に、まるで水彩画のようなフローラルデザインを動的に生成するプロジェクトです(GitHub)。画像ファイルや外部のアセットに一切依存せず、花びら、葉、茎のすべてがLua言語のパラメトリック曲線として計算され、PDFに直接書き込まれます。各ページで異なる庭が描かれるため、単調になりがちな文書の見た目を劇的に変える可能性を秘めていると感じます。
Florilegiumは、画像や外部アセットを使わず、Luaのパラメトリック曲線で手書き風のフローラルデザインをLaTeX文書に生成します。
このプロジェクトは、AIツールであるClaudeの支援を受けて開発された点が特徴です。筆者自身もAIを活用したコーディングを日常的に行っているため、AIがこのような複雑な視覚表現の生成にどのように貢献したのか、非常に興味深く感じます。生成プロセスも公開されており、AIとの協調作業の一例として開発者コミュニティに示唆を与えるのではないでしょうか。
ページレイアウトに合わせた動的な植物の成長
Florilegiumには、大きく分けて2つのデザイン手法が用意されています。
| florilegium.tex | florilegium-grow.tex | |
|---|---|---|
| composition | 手作業で配置された茎、葉、花。各パラメーターはサンプリングされる | ページに合わせて成長する植物。貪欲な空間埋め尽くしループで配置される |
| adapts to | 固定 (A4、余白68mmに調整) | ページレイアウトと、最終ページのテキスト下の余白 |
florilegium.texは固定レイアウトで、A4用紙や特定の余白サイズに最適化されています。一方、florilegium-grow.texは、ページのレイアウトやテキストの残りのスペースに合わせて植物が動的に成長する点が画期的です。例えば、最終ページのテキストが途中で終わると、余白にアーチ状の枝が伸びて空間を埋めます(GitHub)。この適応性は、見た目の美しさだけでなく、ドキュメントのデザインに新たな自由度をもたらすと考えられます。
テキストの残りのスペースに合わせて植物が動的に成長する機能は、ドキュメントデザインに新たな自由度をもたらします。
さらに、この植物の成長過程は記録され、gifやmp4として出力することも可能です。開発の過程で、大きな空間から優先的に埋めていく「貪欲なループ」のアルゴリズムが採用されており、AIがこのようなロジック設計にも関与した可能性を伺わせます。各茎が伸び、葉が開き、花が咲く様子をアニメーションで確認できるのは、技術的な興味をそそるポイントです。
高度なカスタマイズ機能とブラウザでの試用
Florilegiumは、単に美しい余白を生成するだけでなく、ドキュメントの内容と連携する高度なカスタマイズ機能も備えています。例えば、段落の頭文字を花のつるで装飾したり、セクションやサブセクションの見出しの横に花を配置したりできます。特定の行の横に花を咲かせたい場合は、\florilegiumbloomコマンドで指定することも可能です(GitHub)。
ブラウザ上でFlorilegiumを試せるプレイグラウンドも提供されており、コードをダウンロードしなくても手軽にその機能を確認できます。SVG、LaTeXプリアンブル、Typstページ設定として出力されるため、自分の環境に合わせた形式で利用できるのも嬉しいポイントです。
段落の頭文字装飾やセクション見出し横への花配置など、ドキュメント内容と連携する高度なカスタマイズ機能が提供されます。
エンジニア目線で見ると:動的生成とAIの融合が拓く可能性
このFlorilegiumプロジェクトは、単なるデザインツールに留まらない、複数の点でエンジニアにとって興味深い内容だと感じます。まず、画像アセットを一切使わず、純粋なコードで複雑な視覚表現を生成している点です。
これにより、ドキュメントの軽量化はもちろん、レンダリング時の解像度依存性がないため、高精細な印刷物でも美しい仕上がりが期待できます。また、ページごとに異なるデザインが生成されるため、飽きのこないドキュメント作成に貢献するのではないでしょうか。
次に、AI(Claude)が開発に利用された点です。複雑なパラメトリック曲線の設計や、空間充填アルゴリズムの考案において、AIがどのような役割を果たしたのか、詳細なプロセスをぜひ見てみたいところです。私は普段Claude Codeを使ってバイブコーディングを実践していますが、このようなグラフィック生成系のタコードは特にAIとの相性が良いと感じます。
AIがアイデア出しから実装まで深く関与することで、開発期間の短縮や、人間だけでは思いつかないような独創的なアプローチが実現した可能性もあるでしょう。将来的には、ユーザーが「〇〇のような雰囲気の花を」「△△な色合いで」といった自然言語のプロンプトでデザインを指示し、AIがそれをLuaコードに変換して描画するような仕組みも考えられます。
これはローカルLLMでの画像生成とも似た楽しさがあり、自分の個人プロダクトにも組み込んでみたい機能です。Pythonバインディングがあれば、さらに多くの開発者が手軽に試せるようになるのではないでしょうか。