tools/make_epub.py converts the same src/ the PDF is set from, running
polish.py first, with original page numbers as page-list metadata, endnotes
gathered in one linked Notes section, and the colophon and errata included.
It raises on any macro it does not declare. tools/epub_audit.py checks by
class of fault (LaTeX residue, escaping, empty blocks, links, images, XML,
content, typography drift from the PDF); make epub runs both.
\byedition{PDF}{EPUB} lets the colophon carry the sentences that are true of
only one edition; the errata introduction moves into src/errata.tex so both
editions print one copy. reprocheck.py now accepts an .epub and skips
environment parameters that are layout, not copy.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The cover is a full-bleed mosaic of historical Bengali types filling the word
ব্যঞ্জণ, produced by tools/gen_cover_mosaic.py from plates/ and fonts/ alone
(build.sh remakes it if missing). It is static, so ebook readers can cache it.
The mark on the About this edition page is drawn by tools/gen_seal.py, seeded
from a SHA-256 of src/ (never the build's own outputs), so it changes exactly
when the transcription does. The colophon is shortened to name the cover
typefaces and the mark's mechanism, and drops the trailing ProQuest note.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The scan is a bilevel 300 dpi JBIG2 layer plus lower-resolution colour, so
storing every plate as 8-bit PNG only added size. tools/optimize_plates.py
writes copies under work/plates-opt (bilevel to generic-mode, lossless JBIG2;
genuine halftone to JPEG q88) and repoints work/pages at them; plates/ and
src/ are untouched. The Dockerfile builds jbig2enc and adds qpdf, ghostscript
and img2pdf.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Abbreviations are now plain uppercase throughout (Sammay). The pass
small-capped an explicit whitelist, which could only ever be partial: on
the Abbreviations and Conventions page BFBS, LMS and MLCo stood
unconverted in one column beside small-capped BL, BMS, EIC, IOL, OUP,
SOAS and SPG, and "MS EUR 30" split a single shelfmark across two styles.
Completing the whitelist was the obvious fix and the wrong one. The
original is a typescript — a typewriter cannot set small caps — so the
source defines none, and rule 3 leaves every acronym as the plain
uppercase it prints. smallcaps() is now a documented no-op.
p0431: Rtusamhāra -> Ṛtusaṃhāra, verified at 700 dpi (dot under the R,
dot under the m). It was catchable because it broke the Bibliography's
own pattern: the author gives a title in full transliteration and its
anglicised form plain — "Ānanda Bājāra Patrikā (Ananda Bazar Patrika)" —
so a Bibliography entry with the marks stripped is an anomaly, while most
of the remaining flags there are her distinction rather than our error.
Makefile: verify now depends on `build`, not `pdf`. `pdf` is
timestamp-conditional, and a source edited while a build is running
leaves a PDF newer than the source it does not contain — make then skips
the rebuild and verify passes against stale output. That happened here,
and reprocheck caught it correctly twice while I twice misread it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A searchable, re-typeset edition of Fiona Ross, "The Evolution of the
Printed Bengali Character from 1778 to 1978" (Ph.D., SOAS, 1988),
transcribed from the 431-leaf ProQuest scan. All 431 pages done; 178
plates and 410 inline type specimens cut from the scan; 51 errata.
Tracked: the transcription (src/pages), the preamble and its typographic
decisions, the cut images (plates/ — not reliably regenerable, the crop
specs for the inline cuts were never scripted), tools, and the four
working documents.
Not tracked: the built PDF, which `make` remakes from src/ and plates/;
the ProQuest scan under source/, which is third-party and needed only by
`make prep` and `make plate`; scans/ and work/, both regenerable.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>