bloom-sheet --theme option and a calligraphic theme #66

Merged
eureka merged 1 commit from weksa/bloom-sheet-theme into main 2026-11-11 18:56:33 +00:00 AGit
Member

Draft pending Meta's verdict on the look. Preview of the theme's output (Zyphos Atlas sample): https://minds.gamecult.org/weksa/zyphos-atlas-sample/ ; origin: GameCult/Zyphos PR #7 (tools/atlas/calligraphic-page.tex).

What

  • bloom_sheet.py --theme NAME reads themes/NAME.tex instead of page.tex. No --theme: unchanged.
  • themes/calligraphic.tex: ink on parchment, Zapf Chancery through pzc, flat ink strokes, ruled parchment cards.
  • A page file must carry @@CONTENTS@@ and @@TITLE@@ exactly once (@@FONTS@@ at most once), else the build stops and names the marker.
  • test_theme.py (no LaTeX): the marker rule, unknown or path-like theme refused, every theme defines the macros, colours and font families page.tex does.
  • Changelog entry; tools/INDEX.md row.
  • grow.py and page.tex are untouched.

Default output is unchanged (condition 1)

Same input.md, same seed, SOURCE_DATE_EPOCH=1 FORCE_SOURCE_DATE=1, built with the scripts from main and from this branch:

  • PNG: cmp identical.
  • PDF: identical once the /ID pair is blanked; /ID differs on every run, including of unchanged code (it comes from the scratch directory). 56 differing bytes, all in the /ID.
  • --theme calligraphic was built end to end from this branch (2.8 MB PNG, differs from the default, as it should).

Flaws of the theme (condition 3)

  • Mostly flowers. grow.py draws flowers at density; the page reads as a flowered border, not ink vines and foliage. Calmer foliage needs a grow.py change: a separate PR.
  • Single-weight Zapf Chancery via pzc. LuaTeX's fontspec could not load the Type 1 file even with its metrics beside it, so the theme goes through NFSS pzc, which has one weight: strong and soft text are colour only.
  • Slots are caption frames. A card is sized by its words, so an illustration slot is a ruled box holding its brief, not a picture-sized hole.
  • Trap for theme authors: markers are replaced inside TeX comments. bloom_sheet.py replaces the three marker strings everywhere, so a comment that names one splices the whole content into the preamble (the first build failed with an undefined \head). Documented in page_source's docstring and the changelog; the new check turns it into an error naming the marker.
  • About 2.75 minutes to render on Yggdrasil, as the default does.

For Eureka's Soul. No second pass started.

🤖 Generated with Claude Code

Draft pending Meta's verdict on the look. Preview of the theme's output (Zyphos Atlas sample): https://minds.gamecult.org/weksa/zyphos-atlas-sample/ ; origin: GameCult/Zyphos PR #7 (`tools/atlas/calligraphic-page.tex`). ## What - `bloom_sheet.py --theme NAME` reads `themes/NAME.tex` instead of `page.tex`. No `--theme`: unchanged. - `themes/calligraphic.tex`: ink on parchment, Zapf Chancery through `pzc`, flat ink strokes, ruled parchment cards. - A page file must carry `@@CONTENTS@@` and `@@TITLE@@` exactly once (`@@FONTS@@` at most once), else the build stops and names the marker. - `test_theme.py` (no LaTeX): the marker rule, unknown or path-like theme refused, every theme defines the macros, colours and font families `page.tex` does. - Changelog entry; `tools/INDEX.md` row. - `grow.py` and `page.tex` are untouched. ## Default output is unchanged (condition 1) Same `input.md`, same seed, `SOURCE_DATE_EPOCH=1 FORCE_SOURCE_DATE=1`, built with the scripts from `main` and from this branch: - PNG: `cmp` identical. - PDF: identical once the `/ID` pair is blanked; `/ID` differs on every run, including of unchanged code (it comes from the scratch directory). 56 differing bytes, all in the `/ID`. - `--theme calligraphic` was built end to end from this branch (2.8 MB PNG, differs from the default, as it should). ## Flaws of the theme (condition 3) - **Mostly flowers.** `grow.py` draws flowers at density; the page reads as a flowered border, not ink vines and foliage. Calmer foliage needs a `grow.py` change: a separate PR. - **Single-weight Zapf Chancery via `pzc`.** LuaTeX's fontspec could not load the Type 1 file even with its metrics beside it, so the theme goes through NFSS `pzc`, which has one weight: strong and soft text are colour only. - **Slots are caption frames.** A card is sized by its words, so an illustration slot is a ruled box holding its brief, not a picture-sized hole. - **Trap for theme authors: markers are replaced inside TeX comments.** `bloom_sheet.py` replaces the three marker strings everywhere, so a comment that names one splices the whole content into the preamble (the first build failed with an undefined `\head`). Documented in `page_source`'s docstring and the changelog; the new check turns it into an error naming the marker. - **About 2.75 minutes** to render on Yggdrasil, as the default does. For Eureka's Soul. No second pass started. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
eureka changed title from Draft: bloom-sheet --theme option and a calligraphic theme to bloom-sheet --theme option and a calligraphic theme 2026-11-11 18:56:33 +00:00
eureka merged commit 894838df1a into main 2026-11-11 18:56:33 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/Eureka!66
No description provided.