Files
dotfiles/claude/memory/project-eb-garamond-update-2026-05-14.md
T

9.0 KiB
Raw Blame History

name, description, type, originSessionId
name description type originSessionId
EB Garamond + EBGaramondSC font update — Phase 1 / 2 / 3 + LaTeX + SC corrective + feature expansion all DONE 2026-05-15 Five commits across two days. Phase 1 (2026-05-14, d9efb88) — core TTFs + Regular/Italic/Bold WOFF2 from Pardo v1.131. Phase 2+3 (2026-05-15, 6763b54) — Medium/SemiBold WOFF2 subsets + EBGaramondSC{08,12}-Regular built from Duffner source. LaTeX integration (2026-05-15, e3478e0) — arc-typography.sty \scfont references EBGaramondSC12-Regular.ttf. SC subset corrective (2026-05-15, 4512b9a) — retained 403 .sc glyphs + smcp/c2sc in Medium/SemiBold (versalita verdadera). Feature expansion (2026-05-15, 9d2cccb) — added case + ss06 (Garamond long-tail Q) + ordn (proper ordinals per Hart's §3.3) + swsh + frontispiece-epigraph italic swash CSS pattern (chancery flourishes on every capital of threshold quotations; title stays sober roman per Aldine practice given roman swsh has only 3 Q.long subs). One pre-existing issue still parked — \textsc TeX-capacity crash from yesterday's Phase 1 — flagged at bottom of this memory. project 6cef24d0-242b-474e-b8d4-fd568edf5dc2

State as of 2026-05-14

Steward's installed EB Garamond v1.000 (2017 release; installed to ~/Library/Fonts/ 2019-03-14) is ~6 years out of date. Upstream octaviopardo/EBGaramond12 is alive with active development through 2026-03-27 (master 106a4a6). Upgrade gains: language coverage refinements, kerning improvements, bug fixes accumulated since v1.000.

Plus: EBGaramondSC (the separate small-caps face from Georg Duffner's original georgd/EB-Garamond) is also stuck at the 2019 OTF. Duffner's repo last pushed 2024-03-16; ships source files (SFD/UFO/featurefiles) only — no pre-built TTF/OTF/WOFF2 available. Building requires fontforge/UFO tooling.

Phase 1 — DONE 2026-05-14

Core face TTF (10 files) + 3 live web WOFF2 (Regular, Italic, Bold) replaced with upstream octaviopardo/EBGaramond12 master (sha 106a4a6, 2026-03-27). Old files backed up to dated _backup_2026-05-14/ directories.

Files updated:

  • ~/Library/Fonts/EBGaramond-{Regular,Italic,Bold,BoldItalic,Medium,MediumItalic,SemiBold,SemiBoldItalic,ExtraBold,ExtraBoldItalic}.ttf
  • ~/_Dev/animal-davidglidden-eu/static/fonts/eb-garamond/EBGaramond-{Regular,Italic,Bold}.woff2

Verification:

  • LaTeX hour1-fontcheck.tex re-rendered: substrate clean, no regressions
  • Readings-entry PDF posture re-rendered: text rendering matches v1.000 character; advance widths landed slightly differently but rhythm holds

Phase 2 — DEFERRED (re-subset Medium / SemiBold web subsets)

Four WOFF2 subset files are used live in the screen render:

  • EBGaramond-Medium-Latin.woff2 (23 KB; basic Latin block)
  • EBGaramond-Medium-LatinExt.woff2 (65 KB; Latin Extended)
  • EBGaramond-SemiBold-Latin.woff2
  • EBGaramond-SemiBold-LatinExt.woff2

These were produced via subsetting (probably pyftsubset) from full Medium / SemiBold WOFF2 with unicode-range CSS to split. After Phase 1, the SOURCE Medium/SemiBold has changed but the SUBSET files haven't been regenerated — so the weights 500/600 on screen still serve the May 2026 subsets which were derived from a slightly older upstream.

To complete Phase 2:

  1. pipx install fonttools[woff] (or brew install fonttools — verify pipx vs brew for the right binary; the pipx route is the steward's preferred installation path per the toolchain feedback memory)
  2. From the new EBGaramond-Medium.ttf and EBGaramond-SemiBold.ttf (in ~/Library/Fonts/), produce:
    • Latin subset (U+0020–U+007F + common Latin-1)
    • LatinExtended subset (U+0080–U+024F + commonly-needed extended Latin)
  3. Save as WOFF2 with optimal compression
  4. Replace the four files in static/fonts/eb-garamond/
  5. Visual-diff a screen render to confirm the new subsets are consistent

Approximate effort: ~30 min hands-on + the install of fonttools.

Phase 3 — DEFERRED (EBGaramondSC update)

EBGaramondSC.otf (local) and EBGaramondSC-{Display,Regular}.woff2 (web) are stuck at the 2019 Duffner version. The Pardo continuation (octaviopardo/EBGaramond12) does NOT include SC — the modern approach bakes small caps into the main face via OpenType +smcp feature.

Two paths for Phase 3:

A. Build from Duffner source — clone georgd/EB-Garamond, install fontforge tooling, build EBGaramondSC.otf from the SFD/UFO sources. Last upstream push 2024-03-16, so a fresh build may capture some updates since 2019 — though Duffner's repo has been quiet enough that gains are uncertain.

B. Migrate to +smcp on the main face — if Pardo's EBGaramond-Regular.ttf includes the +smcp feature, the separate SC face can be retired entirely. The LaTeX \scfont declaration becomes \rmfamily\addfontfeatures{Letters=SmallCaps}. CSS-side, font-variant-caps: small-caps works against the regular WOFF2.

The cleanest move is B if Pardo has +smcp. Verify by:

otfinfo -f ~/Library/Fonts/EBGaramond-Regular.ttf | grep -i smcp

or fc-list -v 'EB Garamond' | grep -i small.

If +smcp is present, retiring the separate SC face simplifies the stack across both LaTeX and web. If absent, Path A is the fallback.

Approximate effort:

  • Path B (if +smcp present): ~20 min (verify, edit arc-typography.sty + SCSS, test)
  • Path A (build from source): half-day session — fontforge + ufo2ft pipeline learning curve

Sequencing recommendation

When the steward returns to this:

  1. First: verify Pardo's +smcp presence (5 min check). Settles whether Phase 3 is the simpler Path B or the heavier Path A.
  2. Then: install fonttools via pipx and complete Phase 2 (~30 min). Closes the subset-regression gap from Phase 1.
  3. Finally: execute Phase 3 — Path B if +smcp confirmed; Path A if not.

Filing discipline

  • Local backups at ~/Library/Fonts/_backup_2026-05-14/. Restore via cp _backup_2026-05-14/*.ttf . if a regression surfaces.
  • Web font backups at static/fonts/eb-garamond/_backup_2026-05-14/. Restore via the same pattern.
  • Per feedback-tool-installation-pipx-default.md: install fonttools via pipx install fonttools[woff] (general-purpose CLI tool, isolated deps, on PATH).
  • feedback-tool-installation-pipx-default.md — pipx-default rule applies to the fonttools install.
  • project-arc-pdf-print-postures-session-plan.md — LaTeX templates that consume the updated TTFs.
  • project-chamber-cruft-restoration.md — independent thread; no font dependency.

Pre-existing issue surfaced during 2026-05-15 verification — needs separate investigation

While verifying the LaTeX integration (commit e3478e0), xelatex on tools/latex/samples/hour1-fontcheck.tex crashed with "TeX capacity exceeded, sorry [input stack size=10000]" at line 49 — the \textsc{small-caps via the synthesized command} invocation. Confirmed by isolation test: failure persists with \scfont block entirely commented out, so it is NOT caused by today's SC font work.

Likely root cause: microtype tracking config (mt-EBGaramond.cfg) interaction with Pardo v1.131 OpenType feature table introduced in Phase 1 commit d9efb88 (yesterday). The failure happens in expl3 csname construction (exp_args:Nc) shortly after mt-EBGaramond.cfg loads. The expansion never produces output; the PDF is not written.

Verified scope:

  • \textsc (synthesized small caps on main EB Garamond Regular face) — BROKEN
  • \scfont (true SC face via EBGaramondSC12-Regular) — WORKS (verified by minimal isolation test producing a clean 14 KB PDF)
  • \emph, \textbf, \textit{\textbf{...}}, colour — not directly tested but no errors before line 49

Last known working state: tools/latex/samples/hour1-fontcheck.pdf dated 14 May 13:47 (just after Phase 1 commit at ~13:05). Whether that PDF actually reflects a successful post-Phase-1 render or was stale from an earlier successful render is not certain.

Diagnostic path when picked up:

  1. Render hour1-fontcheck.tex with microtype disabled (\usepackage[disable]{microtype} or comment out the microtype \RequirePackage in arc-typography.sty). If render succeeds, microtype is implicated.
  2. If microtype is the cause, inspect mt-EBGaramond.cfg for tracking rules that depend on font metadata that may have changed between EB Garamond v1.000 (2017) and Pardo v1.131 (2026-03-27).
  3. Workaround if needed: drop tracking = true from the microtype options in arc-typography.sty:28-32 and accept slightly less polished all-caps / small-caps spacing.
  4. Real fix if microtype config is at fault: file a small fix to microtype's mt-EBGaramond.cfg, or override the relevant tracking config locally in arc-typography.sty.

Where to find the working LaTeX setup once fixed: the existing test tools/latex/samples/hour1-fontcheck.tex exercises every component arc-typography.sty registers — it's the right substrate for verifying any fix.

Not blocking: the SC font work (commits 6763b54 + e3478e0) is complete and independently verified. This issue is older than today's work and warrants its own session.