The line was 78 characters at 12pt, above the 60-75 band — not the "~73"
I had recorded. That figure came from a font-metric estimate (measure
divided by the unweighted mean lowercase advance, counting no spaces) and
was simply wrong. Measured directly off the built PDF — 79 full lines,
glyphs plus inter-word gaps — 12pt ran 78 and 13pt runs 73.
So this is not restoring a lost measure, it is fixing a line that was too
long, and raising the size is the better of the two fixes: narrowing the
measure to 5.7in would have shortened the line while leaving the type
small. (Sammay proposed the size bump.)
Set through fontspec Scale=1.0833 over the 12pt class, deliberately: it
scales every size in the family, including the plate captions, but leaves
\baselineskip class-derived, so \setstretch{1.59} still yields the 22.9pt
line measured off the original. That leading is anchored to the inline
specimens and must not drift with the type size.
Verified after the build:
characters per line 78 -> 73 (target band 60-75)
pages 455 -> 479
underfull boxes 84 -> 71
Bengali/Latin ratio 2.08 -> 2.11 Scale=MatchLowercase is applied
after the main font's Scale, so
Tiro Bangla needed no adjustment
specimens still clear of the lines above and below
overfull 0, font warnings 0, reprocheck 0 tokens short
Co-Authored-By: Claude Opus 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>
ScholaX read as too decorative (Sammay), and the font metrics agree: of
the faces considered it sets the smallest lowercase relative to its
capitals — x-height/cap 0.645 against XCharter's 0.717 — so its caps and
ascenders dominate while the lowercase does the reading.
Chosen on measured grounds, not taste alone. All 35 non-ASCII characters
this text uses are covered; the dots-below transliteration set
(ḍ ḥ ṃ ṅ ṇ Ṛ ṛ ṣ ṭ) disqualifies ETbb, Domitian, STEP and Tempora, which
are otherwise reasonable book faces. Real small caps and oldstyle figures
confirmed present, so the acronym setting is unaffected. XCharter ships
with TeX Live, so no font is added. Erewhon was the runner-up until the
metrics showed its x-height is smaller than the current face, which would
have moved readability the wrong way.
Bengali needed no manual adjustment: Scale=MatchLowercase re-derives Tiro
Bangla from the main font's x-height, and the Bengali-to-Latin height
ratio measured off the Scheme of Transliteration held at 2.12 -> 2.08
across the switch, within the ±1px noise of a 300 dpi read.
455 pages, down from 470. Underfull boxes 123 -> 84: XCharter's narrower
set gives the line-breaker more room at the same measure. Zero overfull,
zero font warnings, reprocheck 0 tokens short.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Eight diacritic corrections at seven sites, each verified against the page
image at 900 dpi:
p0049 Nastaʿlīq -> Nasta`līq the mark is a quote, not a ʿayn (Sammay)
p0072 Cálidás -> Cálidās
p0256 Rajākṛṣṇa -> Rājākṛṣṇa
p0260 Īsvaracandra -> Īśvaracandra (x2)
p0430 Iśvaracandra -> Īśvaracandra
p0430 Gītā -> Gīta (x2)
p0430 Munṣī -> Munśī
Found by two nets over the transcription: a rare-character inventory
(U+02BF appeared exactly once in 431 pages — the tell) and a check for
names that appear with more than one accenting, 84 occurrences of which
~32 are now checked. Neither net catches a name mis-transcribed the SAME
way everywhere, so this is a partial sweep, not a clean bill.
The French accents are all handwritten additions in the scan — pen-drawn
cedillas and acutes — applied inconsistently by the author and reproduced
per instance. All of that cluster checks out.
Clickable regions now carry a 0.4pt hairline rule in RGB(95,125,165) on
the Contents/List-of-Plates page numbers and on resolved cross-references;
endnote superscripts and whole-line entries stay unmarked. polish.py emits
\xref for the former and \hyperlink for the latter so the two differ.
Also: plate 1's List-of-Plates entry uses \plx, which build_maps() did not
scan, so plate 1 was the one plate of 178 whose "pl. 1" references never
linked.
build.sh takes an atomic mkdir lock: two builds sharing work/ corrupt
main.aux and produce an error that names the wrong file entirely.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Four plates overhung the measure and displaced into the right margin.
On those pages the original interrupts a displayed quotation with a
plate (p0129/30/31/32, p0217/18, p0386/87), so \plateop ran inside
extract's \addmargin, where the paragraph is set by \parshape to
\linewidth — while the minipage was built at \textwidth. The quotation
indents 0.5in + 0.3in, so the overhang was exactly 0.8in, which is also
\marginparwidth; that coincidence made it look like a marginnote fault
for a long time. \plateop, \plate and \fig now build at \linewidth,
correct in any context and unchanged on the other 174 plates.
Also: \mdseries on the three \bnsignfont cells of the Scheme of
Transliteration, which inherited the table's \bfseries and asked for a
bold Tiro Bangla that does not exist.
The build log is now clean — no overfull boxes, no font warnings. The
remaining underfulls are the documented cost of ragged right with
hyphenation off.
Docs: PLAN.md's Type row carried four stale values (11pt, 5.2in measure,
leading 1.22, hyphenation on) and now records the measured leading and
its derivation; CLAUDE.md's macro table documents \chapstart's optional
short title and \toclnp; QUESTIONS.md splits the quotation slips by
whether the source can be consulted at all — five are unpublished
archive material and are a record, not a task.
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>