Files
dotfiles/claude/memory/project-arc-pdf-print-postures-session-plan.md
T

160 lines
12 KiB
Markdown

---
name: ARC PDF + Print posture rendering session plan — XeLaTeX templates + AldineXXI sample images
description: Dedicated session to build both Postures (PDF + Print) as LaTeX templates, render the Readings typology spec as PDF, and produce sample-image pairs for the AldineXXI page rewrite's Postures section. Two-birds: deliver the deferred Print/PDF posture spec sections AND the AldineXXI assets in one focused session.
type: project
originSessionId: a5411fd1-4a96-43e7-aa1a-1a50d8951a8f
---
## Context
The Print/PDF posture is named in `AldineXXI-specification.md` (Prologue *Postures* line 64; §II.d line 1237) but the actual stylesheet/template work is deferred. Per the spec:
- **Print posture**: browser/PDF rendering for a reader who prints from the site. Asymmetric Van de Graaf canon (paper has its own tradition; spread is a fold). **Always asymmetric**, regardless of marginalia density.
- **PDF posture**: downloadable finely-set form, **mirrors the screen's per-piece composition** (§II.d). Asymmetric when the piece carries marginalia; symmetric when it does not.
This session does both postures in one focused day, using the Readings typology-spec amendment (commit `5792286`, 2026-05-14) as test substrate. The Readings entry is dense enough to stress page-flow, multi-language typography (French + Latin + Greek), block quotation, marginalia, italic discipline, and small caps — most of what posture work must handle. Tier-1 typography choice: **XeLaTeX + pandoc** (per steward 2026-05-14: do this properly once; revisit Typst when it overtakes LaTeX for this domain).
## Two-birds rationale
The AldineXXI page rewrite (memory: `session-2026-05-10-aldine-xxi-chavruta-and-capsule-design.md`) will want sample images illustrating each posture in §I (Postures section). Building both posture templates in the same session produces those images as a natural byproduct.
## Pre-session verification (already confirmed 2026-05-14)
- [x] **pandoc** — 3.9.0.2 installed at `/opt/homebrew/bin/pandoc`
- [x] **MacTeX 2026** — installed at `/usr/local/texlive/2026`; `xelatex` / `lualatex` / `pdflatex` / `tlmgr` at `/Library/TeX/texbin/`
- [x] **IBM Plex Sans** — 12+ weights+styles as TTF in `~/Library/Fonts/`
- [x] **IBM Plex Mono** — 10 weights+styles as TTF in `~/Library/Fonts/`
- [x] **EB Garamond** — installed (including SC small-caps variant as OTF: `EBGaramondSC.otf`); also Garamond Premier Pro (Adobe) for richer fallback if needed
- [x] **pdftoppm** — installed at `/opt/homebrew/bin/pdftoppm` (for PDF → PNG image extraction)
Optional (nice-to-have, not required):
- [ ] **ImageMagick** (`brew install imagemagick`) — for advanced PNG manipulation; `pdftoppm` covers basic extraction needs
- [ ] **Verify** specific EB Garamond weights when session opens: Regular, Italic, Bold, Bold-Italic. If any are missing, install via Homebrew cask (`brew install --cask font-eb-garamond`) — but the steward has the Adobe Garamond Premier Pro as premium fallback regardless
## Session goals (~6 hours, structured)
### Hour 1 — Setup + minimal XeLaTeX template
- Working directory: `~/_Dev/animal-davidglidden-eu/tools/latex/` (new)
- `template-pdf-posture.tex` — minimal XeLaTeX template
- `template-print-posture.tex` — minimal XeLaTeX template (twoside)
- Font registration via `fontspec`:
- `\setmainfont{EB Garamond}` (reading layer per §I)
- `\setsansfont{IBM Plex Sans}` (navigation register)
- `\setmonofont{IBM Plex Mono}` (apparatus register)
- Basic `\usepackage{geometry}` with reasonable defaults
- Pompeian palette as `xcolor` definitions (light theme; dark theme deferred)
- First render of a single Readings entry paragraph; confirm fonts render correctly
### Hour 2 — PDF posture template (per §II.d, content-driven)
Build out PDF posture support for:
- **§I Typographic Core** — fontspec stack, font-scale factors per §I (Plex Sans/Mono scale to match Garamond optical size)
- **§II Spacing Scale** — silence taxonomy (the leading, paragraph spacing, between-section breathing)
- **§II.d Page composition** — content-driven: asymmetric when piece carries marginalia, symmetric when it does not. Implement as a posture flag in the document preamble; default behavior is content-driven
- **§III Color** — light-theme Pompeian palette; dark theme deferred
- **§I.b Lists** — both bullet and definition lists; navigation lists vs reading lists
- **§VII Apparatus** — dateline (Plex Mono mono-but-not-code register), Sources block (hanging indent), footnotes, captions
- **§XII Sidenotes / marginalia** — using `sidenotes` package or custom marginalia commands; markerless default, marker-anchored fallback
- **Code blocks** — `code.sourceCode` styling per §I.c (warm-tinted background)
Render the Readings entry; iterate until the page reads as a faithful translation of the screen version.
### Hour 3 — Critique + iterate on PDF posture
- Surface what breaks: page breaks at wrong places, hyphenation issues, multi-language quirks, small-caps inconsistencies, microtypography gaps
- Pull out `microtype` package (production microtypography: character protrusion, font expansion, additional kerning)
- Address discoveries; tune the template
- **This is where the §II.e+ Print/PDF posture spec sections get their rough draft material**: write down what posture rules emerged from rendering
### Hour 4 — Print posture template (twoside, Van de Graaf, asymmetric-always)
Switch posture flag to `print`:
- `\documentclass[twoside]{book}` or `memoir` class
- `geometry` with Van de Graaf canon proportions (margins 1:1:2:2 or finer Tschichold ratios)
- Mirrored margins (`oddsidemargin` / `evensidemargin`) so verso/recto compose as a spread
- Asymmetric vessel **always active** regardless of marginalia content (per spec line 1239)
- Header/footer matter: running heads per §VII.f; folios
- Render the same Readings entry — now as a spread
### Hour 5 — Sample-image preparation for AldineXXI page rewrite
Render both postures of representative pieces, capture as PNG via `pdftoppm`:
- **PDF posture sample**: a piece WITH marginalia (asymmetric — e.g., a Hearth-style piece, or the AldineXXI spec itself) at typical screen-mirror scale; single-page or stacked-pages view
- **PDF posture sample**: a piece WITHOUT marginalia (symmetric — e.g., a Glimpse caption-only piece or short Fragment); single-page
- **Print posture sample**: the same WITH-marginalia piece, now as a Van de Graaf spread (two facing pages); the asymmetry of the spread is the point
- **Print posture sample**: a piece without marginalia, **still** asymmetric (per the always-asymmetric rule); contrast with PDF symmetric version
Naming: `static/img/postures/posture-pdf-asymmetric.png`, `posture-pdf-symmetric.png`, `posture-print-spread-with-marginalia.png`, `posture-print-spread-without-marginalia.png`. Resolution: high enough for retina display in the AldineXXI page (likely 2x intended display, ~300dpi from `pdftoppm`).
### Hour 6 — Document the template + rough-draft posture spec sections
- Capture the rendering session's learnings as rough notes for the §II.e+ Print/PDF posture spec sections in AldineXXI
- Document the templates: `tools/latex/README.md` explaining build commands, posture flags, font requirements, what each template handles
- Surface unresolved questions for steward decision (e.g., specific Van de Graaf ratio, whether ARC adopts strict Tschichold or a refined variant, dark-theme PDF rendering)
- Pickup notes for the next iteration (font kerning if it bothers you, baseline grid if it matters)
## Test substrate
Primary: the **Readings entry** in `content-typology-specification.md` (lines after Gloss, before "### Draft definitions"). Dense, multi-language, marginalia-friendly, ~2500 words. Stresses everything posture work must handle.
Secondary (if Hour 5 has time): the **AldineXXI spec §I-§II.d itself** — a longer document that exercises multi-page layout, running heads, folios, cross-references.
## Output artifacts
After session, working directory should contain:
```
tools/latex/
├── README.md # build instructions, posture flags
├── template-pdf-posture.tex # PDF posture template
├── template-print-posture.tex # Print posture template
├── arc-typography.sty # shared font + color + spacing definitions
├── pandoc-pdf-posture.yaml # pandoc invocation config
├── pandoc-print-posture.yaml # pandoc invocation config
└── samples/
├── readings-entry-pdf-posture.pdf
├── readings-entry-print-posture.pdf
└── images/
├── posture-pdf-asymmetric.png
├── posture-pdf-symmetric.png
├── posture-print-spread-with-marginalia.png
└── posture-print-spread-without-marginalia.png
```
Plus:
- Rough draft of §II.e (or wherever they land) — Print posture spec section + PDF posture spec section — saved to `docs/AldineXXI-Codex/drafts/postures-rough-draft-YYYY-MM-DD.md`
- Sample images copied to `static/img/postures/` for AldineXXI page rewrite use
## Pickup notes for future-Claude or steward
- **Read this file first; it's self-contained.**
- DO NOT touch code before confirming the pre-session checklist; if anything is missing, install before starting
- Per CLAUDE.md governance, this session is **[HARDENING]** at minimum (addresses class of failure in deferred-posture-spec; brings two specs to first-render) — though arguably it's spec implementation against an already-agreed direction, which is fine to proceed as `[FIX]`-style execution. Steward to clarify if escalation needed.
- The Readings spec amendment `5792286` is the test substrate; the spec already references the typology entry by name in commit body
- The session should result in TWO commits: (1) `tools/latex/` template scaffolding; (2) AldineXXI §II.e+ posture spec rough draft + sample image attachment
- DO NOT deploy the site during this session — the work is template + assets + spec rough draft, not site-content
- The font stack is the steward's installed system fonts (TTF in `~/Library/Fonts/`), not the site's `_site/fonts/` woff2 files. fontspec uses system fonts directly. The woff2 files remain authoritative for the WEB delivery; LaTeX uses TTF/OTF for the PDF/Print delivery. Two delivery surfaces, two font formats, same typeface intent.
- **Microtypography is the quality lift.** `\usepackage{microtype}` with appropriate config (character protrusion, font expansion, additional kerning, tracking for all-caps) is the single most important quality move. Don't skip.
- **Hyphenation patterns**: French + Latin + Greek + English content needs polyglossia or babel with appropriate language packages. `\usepackage{polyglossia}` is current best.
- **The image-capture trick**: `pdftoppm -r 300 -png input.pdf output_prefix` produces high-resolution PNG; trim/frame in Preview or via `convert` (if ImageMagick installed).
## Connection to other open arcs
- **AldineXXI page rewrite** (memory: `session-2026-05-10-aldine-xxi-chavruta-and-capsule-design.md`) needs sample images for the §I Postures section. This session produces them.
- **Readings spec** (commit `5792286`, memory: `project-gloss-vs-commentary-distinction.md`) is the substrate. This session is its first rendered exercise.
- **Chamber cruft restoration** (memory: `project-chamber-cruft-restoration.md`) is independent of this session; runs on its own arc.
- **L1 recall fix** (memory: `project-L1-recall-fix-session-plan.md`) is independent; runs on its own arc.
## Open questions for the session itself
1. Which Van de Graaf ratio variant? The classic canon (1:1:2:2 margins) or a refined Tschichold ratio? The masters in chamber (Tschichold, Bringhurst) likely have the answer; check the chamber if uncertain.
2. Hyphenation: strict Knuth-style or relaxed for narrow measures? Print and PDF may want different settings (Print's spread allows wider measures; PDF's screen-mirror may need narrower).
3. Drop caps: §I governs in HTML; how does this translate to LaTeX? `lettrine` package is standard; check if it honors the right typeface and integrates with EB Garamond cleanly.
4. Small caps: `\textsc{}` vs proper SC font (`EB Garamond SC` is available as separate OTF). The SC OTF gives true small-caps; `\textsc{}` synthesizes from regular if no SC font is registered. For Aldine-grade work, true SC is the floor.
5. Dark-theme PDF rendering: deferred from this session, but worth noting whether the template can be extended later via a `--variable=theme=dark` pandoc flag.