Florilegium:LaTeX による手続き的フローラ

2026/10/31 0:48

Florilegium:LaTeX による手続き的フローラ

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

この革新的な LaTeX システムは、Lua において PDF の作成中に計算されるパラメトリック曲線のみを使用して、外部アセットや画像なしにユニークなデルフトブルーの花卉装飾縁を手順的に生成します。各ページには、ページ番号から派生したシードに基づいて個別の庭園が割り当てられ、確率的ロジックではなく決定論的ロジックを通じて安定性が確保されます。システムは 2 つのモードで動作します:「authored」モードでは水彩風プリミティブ(平洗い、濃いシミ、白いストリークによる引き上げ、裂葉、 forget-me-not のシーム、イヴリーブレードの花紋)の手動配置を行い、「grown」モードでは SIGGRAPH 1998 の装飾文献に触発された貪欲な空間充填ループを採用します。システムは A4 レイアウトで 68 mm の余白を備えたり、最後のページの空きスペースを自動的に満たしたりすることに適応します。追加機能には、春から秋までの季節的な経年変化や、蝶や蜂、カタツムリ、鳥などのランダムな訪問者の実装が含まれます。また、OKLCH 空間における「ink」に由来する単一色のパレットも採用されています。システムは LuaLaTeX ドキュメント内で

\florilegiuminitial
、
\florilegiumbloom
、見出し用の花を持つ
sections
、そして
aging
/
novisitors
オプションをサポートします。イニシャルは、デフォルトの Latin Modern Bold の OpenType フォントから文字の輪郭を読み取ることで作成され、反転部やストローク内部に蔓と花卉による装飾が描かれます。ユーザーは Ghostscript を使用して自己完結型の PostScript ファイル(
postscript/florilegium.ps
)を直接 PDF にレンダリングでき、その際
-dALLOWPSTRANSPARENCY
フラグを使用します。アニメーションツールによって成長シーケンス(例:
build/grow-6.gif
)や空間充填プロセスの可視化を行う説明的 GIF(例:
build/grow-6-explain.*
)を生成できます。ローカルの TeX 環境を持たないユーザー向けに、Docker ビルド(
tools/in-docker
)と Overleaf セットアップガイドが提供されています。プロジェクトは MIT ライセンスの下で公開され、さらなる変更やアニメーションのためによりコア Lua モジュールである
ink.lua
、
flora.lua
、
grow.lua
、
authored.lua
、
florilegium.lua
、および
initial.lua
が含まれています。

本文

Florilegium: 手書き風の手続き的レイアウトによる LaTeX 用余白

概要

  • 目的: LaTeX ドキュメントの**余白(マージン)**を手書き風の花卉で装飾するプロジェクトです。
  • アプローチ:
    • 既存の作品のコピーではなく、独自のアプローチにより同様の雰囲気を再現しています。
    • 1998 年の装飾文献に基づく手続き的なレイアウトと、ランダム化されたパラメータを持つ手書きプリミティブを組み合わせます。
  • 特徴:
    • 画像ファイルの読み込みや外部アセットは一切使用しません。
    • すべての花びら、葉、茎は Lua で計算されたパラメトリック曲線です。
    • 水彩色画のように描画され、そのまま PDF に書き込まれます(各ページに独自の庭園が生成されます)。

構成要素と環境対応

ファイルと機能

プロジェクトには以下の 3 つの主要なドキュメントが含まれます。

  • florilegium.tex
    : ベースとなるファイル
  • florilegium-grow.tex
    : **成長型(生成風)**の構成を使用する場合
  • composition
    : その他の機能を実演するためのモジュール

2 つの主要なモード

  1. authored
    (手書き風)
    • 茎、葉、花を手動で配置します。
    • 各パラメータをサンプリングした構成です。
  2. grown
    (生成風)
    • グリディアル(格子状)な空間埋め込みループを用います。
    • ページ内に収まるように植物が自動成長します。

環境への適応

  • nothing
    : A4 サイズ、余白 68 mm に調整された設定(デフォルト)。
  • the page layout
    : テキストの下の最後のページの自由なスペースにも適応します。

プレビューと成長プロセス

プレビュー画像の構成要素 (300 dpi)

白いスチーク(点描)や脈紋など、以下の要素が含まれます。

  • モットルワッシュ: 白いスチークを浮かび上がらせた効果
  • 裂葉: 脈紋が入った葉
  • スリムプスの円錐花序 (Cyme)
  • ゴーストフラワー: 茎の後ろに浮かぶ薄い花

成長のメカニズム (
watch it grow
)

空いた余白から完成したページへの変化を追跡します(例:種「6」を使用)。

  1. 初期段階: 最初に茎が伸び、先端がノードを越えるにつれて葉が開きます。
  2. 開花: 各茎は最終的に花で終わります。
  3. 空間埋め込み:
    • グリディアルなループが主導権を握り、枝が成長する直前に見つけた最大の自由な円盤から順に穴を埋めます(破線の円で示される)。
    • 大きな穴はゆっくり、小さな穴は高速で埋まります。
  4. 来訪者の登場: 蝶々や蜂が飛び入り、鳥が枝にとまり、カタツムリが茎を這います。

再生と可視化

  • 成長過程は一度記録され、各フレームでランダム抽選を繰り返して再生されます。
  • コマンド実行例:
    make grow-6
    • 約 45 秒のアニメーション (
      build/grow-6.gif
      ,
      .mp4
      ) が生成されます。
    • 成長中の「破線の円(最大の自由な円盤)」を表示するには、
      EXPLAIN=1
      を追加します。

テキストとの連動 (インタラクティブな余白)

余白は周囲のドキュメントの内容に反応して変化します。

イニシャル (
\florilegiuminitial
)

  • \florilegiuminitial[5]{E}
    で段落の最初の文字「E」を 5 ライン分のタイル内に配置します。
  • 描画方法: OpenType フォント(デフォルト:Latin Modern Bold)から輪郭を読み取り、花びらのように描画します。
    • ブドウの蔓が文字の上を通ったり下を通ったりし、葉や花が文字の**カウンター部分(くぼみ)**に配置されます。
  • テキスト処理: 文字は目に見えずタイプライターとして処理されるため、原文(例:"Every")がそのままコピーされます。

見出しと特定の場所への配置

  • 見出しの花:
    sections
    オプション有効時に、各セクションの見出し傍らにアクセント色(銅色)の花が配置されます。
  • 行末の花:
    \florilegiumbloom[lily]
    コマンドで特定の行の傍らに花を配置できます。

季節 (
aging
)

  • aging
    オプション有効時に、庭園はページが進むごとに年齢を重ねます。
    • 春 (初頁): 蕾が多く、葉は小さく薄い色。
    • 秋 (終頁): 種実頭部、落ちる花びら、銅色の葉が出現。
  • 設定: 2 回のコンパイル(パス)が必要です。
    \florilegiumage{0.8}
    で手動で年代を設定可能です。

来訪者 (
visitors
)

ほぼすべてのページに以下の生物がランダムに出現します。

  • 蝶々・蜜蜂・鳥
  • カタツムリ: メインの茎の一つを這う姿
  • 除外設定:
    novisitors
    オプションでこれらの生物を表示させません。

インクの色使い (Any ink)

  • パレットは 1 つのドキュメントカラー(セピア、緑、赤、紫など)から派生します。
  • グラデーション: 最も濃いストロークから薄いワッシュへ。OKLCH 色空間で彩度を計算し、明部でも青みを維持します。

PostScript での実装 (
florilegium.ps
)

純粋な PostScript で成長型余白を記述する自己完結型のファイルです。

  • 機能: Ghostscript やプリンタがページを解釈する際、すべての花びらを計算します。
  • 移植元:
    ink.lua
    ,
    flora.lua
    ,
    grow.lua
    の手続き単位からの移植。TeX は不要です。

実行コマンド例

gs -dALLOWPSTRANSPARENCY -sDEVICE=pdfwrite -dSeed=7 -o garden.pdf postscript/florilegium.ps
make postscript             # 同上 -> build/postscript-7.pdf

設定オプション

  • 庭園選択:
    -dSeed=N
    を指定。指定なしの場合はクロック値が使用されます(各印刷で異なる庭園)。
  • 季節設定:
    -dAge=0 to 1
    で調整可能。
  • 来訪者除外:
    -dNoVisitors
    フラグを使用。
  • 実行時間: 2 ページの描画に約 2.5 秒 かかります。

制限事項 (Lua から PostScript へのマッピング不可)

  1. レイヤー: 裏から表へ描画されるため、フィルとストロークをリストでキャプチャし、最後に再生成する必要があります。
  2. トランスパレンシー: Ghostscript の
    -dALLOWPSTRANSPARENCY
    フラグが必要。なければ不透明に描画されます(より平面的になりますが、同じ庭園)。
  3. ランダム性: Lua の 64 ビット浮動小数点と PostScript の単精度実数による違いがあり、同一シードでも異なる結果になる可能性があります。
  4. テキスト: フォントセットアップは行えますが、イニシャル、アニメーション、手書きの構成はありません。

プリンタでの動作

  • lp
    コマンドで送信する場合、シード指定なしでもコンピューター印刷システムが再実行するため、各印刷で異なる庭園が生成されます。
  • プリンタはトランスパレンシーがないため、不透明バージョンが表示されます。

ビルドと使用方法 (Build & Usage)

構築コマンド (
make
)

make                        # florilegium.tex, florilegium-grow.tex, composition の 3 つの PDF を生成
make seed-7                 # 種 7 から 1 ページ -> build/seed-7.pdf
make gallery                # 園芸コレクション画像生成 (seeds.png, inks.png など)
make grow-6                 # 種 6 の成長アニメーション -> build/grow-6.gif + .mp4
make grow-6 EXPLAIN=1       # 自由な円盤も表示したバージョン

Docker 環境(TeX 未インストール時)

docker build -t florilegium-tex tools
make RUN=tools/in-docker

Overleaf で使用する場合

以下のスタイルパッケージを読み込み、コンパイラを LuaLaTeX に設定します。

\usepackage[grown]{florilegium} % または \usepackage{florilegium} (手書き風)

カスタマイズ例

% 色パレットの定義
\definecolor{ink}{HTML}{5B2A1F}      % セピア調の基本色
\definecolor{accent}{HTML}{B4662F}   % ハイエラインの銅色

% イニシャル設定:段落 "This..." の T に飾り
\florilegiuminitial[4]{T}his paragraph starts with a decorated T.

% 特定の行に花を配置
\florilegiumbloom ... 

% 季節経過の設定 (成長型のみ)
\florilegiumage{0.8}                 % ここから秋以降へ

% テキスト終了後の処理 (成長型のみ)
\florilegiumtextend

シードの固定

ランダムな庭園ではなく固定したシードを使用したい場合:

lualatex "\def\florilegiumseed{7}\input{florilegium-grow.tex}"

TikZ 内での描画

現在のスコープ(移動、回転、スケール)下で独自にプリミティブを描画できます。

\begin{tikzpicture}
  % 位置 (2,2) に移動し、20 度回転したスコープ内
  \begin{scope}[shift={(2,2)}, rotate=20]
    \florilegiumdraw{flower}{1.3}
  \end{scope}
  
  % 位置 (5,0) で葉を描画 (深さパラメータ付き)
  \begin{scope}[shift={(5,0)}]
    \florilegiumdraw{leaf}{3.0, {depth=0.6}}
  \end{scope}

  % ゴーストフラワー(リリス種)
  \begin{scope}[shift={(8,1)}]
    \florilegiumdraw{ghost}{{"lily", {s=1.4}}}
  \end{scope}

  % 蝶々
  \begin{scope}[shift={(11,1)}]
    \florilegiumdraw{butterfly}{1.5}
  \end{scope}
\end{tikzpicture}

動作原理 (How it works)

コアモジュールとロジック

  • ink.lua
    (描画):

    • 幾何学は Lua で計算され、PDF パスオペレーターとして直接書き込まれます(TeX は演算を省きます)。
    • プリミティブはアフィニア変換下のローカルフレーム内で描画されます。
    • 色は OKLCH 空間で補間し、明部でも青みを維持します。
    • ストロークはサンプリングではなく、2 つのオフセットベジェ曲線で表現されます。
  • flora.lua
    (プリミティブ):

    • 水彩画家の順序で描画:ワッシュ → スポット → 縁の色素 → スチーク → 脈紋。輪郭はほぼなし。
    • 対象:花びら、スターリリス(開花前)、蕾、裂葉、総状花序、蝶々、鳥、銅色の輝きなど。
  • authored.lua
    (手書き構成):

    • 左下隅から根として成長し、制御点を通過して伸びます。
    • フッターとして沿う茎や、葉の配置割合が設定可能です。
  • grow.lua
    (生成構成):

    • SIGGRAPH 1998 の「Computer-Generated Floral Ornament」に基づきます。
    • 反復的プロセス:最大の自由な円盤を見つけ合い、最も近い茎ポイントから枝を成長させます。
    • 順序: 大きな穴(花・リリス)→ 中程(葉・スプレイ)→ 小穴(蕾・小花)。
  • florilegium.lua
    (ページの読み取り):

    • テキストに目に見えないマーカーノードを残し、ページ出力時にボックス内を巡回します。
    • マーカーの高さを発見し、庭園を配置します。
    • 季節経過により、モチーフの重みが再計算されます(春→秋)。
  • initial.lua
    (イニシャル):

    • OpenType フォントの輪郭を読み取り、ベジェセグメント化し、最大のギャップを検出します。
    • ブドウの蔓は Catmull-Rom 曲線として描画され、文字の上を交互に通ります。

再現性について

  • 手続き的 ≠ ランダム: シードはページ番号から導出されるため、ページ n は常に庭園 n を受け取ります。
  • これにより、ドキュメントを「タイプライター」のように安定して再現できます。

ライセンス

MIT

同じ日のほかのニュース

一覧に戻る →

2026/10/31 2:25

僕の一番好きなPower Macは、ニンテンドーWiiだ

## Japanese Translation: Rairii のゲスト投稿では、ArtX ベースの PowerPC システム(特にニンテンドーコンソールであるゲームキューブ、Wii、Wii U)への古典的な Mac OS バージョン 7.6 と 9.2.2 の成功したポート作業について詳述されている。同プロジェクトは 2025 年 6 月 22 日に開始され、AI の助力なしに完全に手動作業によるコーディング、リバースエンジニアリング、デバッグを通じて完了している。大きな突破点は、FAT ファイルシステムを備えた OpenBIOS を改修して Mac OS イメージをロードできるようにしたことであり、開発者は NT ARC ファームウェアローダーなどの既存のツールの再利用を行ったが、ドライバーは大幅に修正した:Elliott Nunn の virtio ベースのディスプレイドライバーの再利用、"SD Gecko"(SPI アダプター)および"EXI-IDE"(SPI エミュレーション)ディスクドライバーの実装、物理アドレス空間の前提条件と MMIO マッピングのエラーを修正する「Trampoline」へのパッチ適用などである。重要なカーネルパッチはマイクロコントローラー用のビットフラグの修正、Flipper および PCI アーキテクチャ間の中断コントローラの不整合への対処、レガシーモードの問題の解消といったハードウェア固有の課題に対応している。具体的なレガシーバグも修正された例として、「SuperMario」m68k 環境におけるシリアルポートコード内の無限ループがある。現在、SD を通じて SPI で実機上で Mac OS 7.6 は 40 秒以内に正常に起動するが、Mac OS 9.2.2 については不安定な Open Transport コンポーネントを除去しクラッシュを防ぐためにさらなる作業が必要である。

2026/10/30 16:09

Cursor マーケットの VS コード拡張機能「Claude Code」に後門が存在する

## Japanese Translation: 公式 Cursor マーケットPLACE で配布されている公式 Claude Code 拡張機能(バージョン 2.1.313)に重大な裏門(バックドア)が発見された。攻撃者は Windows、Linux、macOS のいずれの環境でもユーザーのマシンに対して永続的なアクセス権を取得できる。ベンダーが管理する配布チャネルに関する標準的な仮説とは異なり、この悪意のあるアップデートは SSH キーを埋め込み、逆回線トンネルを確立することで、インストール時に直接ユーザーの関与を必要とせずにもれなくシェルへの完全なアクセス権限を取得する。この脅威は macOS のセットアップスクリプトに含まれる特定の脆弱性を利用し、セキュリティチェックを迂回すると同時に、機微なシステムデータを攻撃者管理のサーバーにビーコン送信している。Cursor は以来、その登録から該当の侵害されたリリースを削除した。バージョン 2.1.313 を使用している組織は、直ちに環境を検査し、拡張機能をアンインストールし、埋め込まれた認証情報や実行中のトンネルプロセスを能動的に探してセキュリティを回復する必要がある。この事件は、堅牢なサプライチェーン監査の緊急性を示しており、正規の開発ツールが企業ネットワーク内におけるデータ窃取および lateral movement(横方向移動)の予期せぬベクトルとして機能し、ベンダー配布ソフトウェアへの信頼を損なう可能性があることを強調している。

2026/10/31 6:30

sanstun:Rust で実装された、sans-IO を採用した並列性に優れた WireGuard 実装

## Japanese Translation: Sanstun は、非推奨の `firezone/boringtun` フォークを代替する、WireGuard 状態機械の最適化された Rust 実装(IO なし)をリリースしました。この新しい設計は、並列処理に適した慣用 API を使用して I/O および副作用(時間と乱数を含む)をコアビジネスロジックから分離することで、使いやすさ、セキュリティ向上、パフォーマンスを優先しています。主な利点には、プロトコル不変性をマッピングする型を通じたコンパイル時安全性、`Instant` オブジェクトによる時間処理を通じた正確なシステムシミュレーション、Diffie-Hellman 鍵交換およびクッキー管理を通じた DoS 攻撃に対する内蔵防御が含まれます。API は明示的に記録業務(例:カプセル化の開始)と重い暗号化/復号化を分離することで同期ボトルネックを回避し、暗号処理をワーカースレッドにオフロードした場合のベンチマークでは 45 倍以上のスピードアップの可能性を示しています。ユーザーは現在、パケットを手動でバッファリングする必要があり、`Tunnel::initiate_handshake` を通じてハンドシェイクを開始する必要がありますが、この設計はプライベートハンドシェイクコンスストラクタ(`Interface::receive` のみアクセス可能)を介してコンパイル時にレート制限および正しいトンネルルートを強制します。このアプローチにより、以前のフォークで問題となった直感的ではないドレインや設定できないバッファサイズのなどの内部バッファリング問題は解消されます。Sanstun パターンは Rust に限定されず、様々なプログラミング言語での実装にも有益である可能性があります。Apache 2.0 ライセンスの下で crates.io で利用可能であり、非推奨の `firezone/boringtun` フォークから移行する過程で GitHub の issue および PR を通じて貢献を招集しています。

Florilegium:LaTeX による手続き的フローラ | そっか~ニュース