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>
A finite \parfillskip was tried at 0.75\textwidth (no effect) and then,
after deriving the threshold, at 0.15\textwidth (real effect, bad
trade). Badness is 100(G/X)^3 against tolerance 4000, so the threshold
is G ~ 3.4(X + 24pt): on a 430pt measure any X at or above
0.25\textwidth prescribes a threshold longer than the measure and can
never fire. The only values in range are 0.15 and 0.10, and 0.10 bites
harder — so the lever is effectively binary.
At 0.15 it did what it promised and cost more than it bought:
paragraph-final mean 161.7 -> 142.7, p90 319 -> 267, max 398 -> 341
paragraph-internal median 22.8 -> 35.7pt, >3em short 29.4% -> 48.0%
underfull boxes 123 -> 1902
There are far more interior lines than final ones. Back to ragged2e's
default, with the derivation kept in the preamble so this is not
rediscovered by experiment a third time.
Net of all five levers: 5 fixed a real conflict, 2 and 4 are harmless
and near-inert here (the ragged right margin is never reached, and only
1.6% of lines begin with a protrudable character), 1 and 3 were
reverted as measurably harmful. Rag is within ~1% of where it started.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
\platefullmeasure resets \parshape for a plate's own paragraph, so a
plate keeps the full text measure even where the original interrupts a
displayed quotation with one. Verified in the built PDF:
plate 50 (p0130) 319.2 x 484.3 pt height-limited, unchanged
plate 51 (p0131) 430.5 x 356.0 pt full measure (was 372.2)
plate 97 (p0218) 430.2 x 274.8 pt full measure (was 372.2)
plate 165 (p0387) 351.1 x 484.5 pt height-limited, unchanged
Line-breaking levers, measured with work/rag.py over 102
paragraph-internal lines on nine text pages:
1. permitted rag 2em -> 4em: made every statistic WORSE (median rag
22.8 -> 24.8pt, sd 79.6 -> 89.1, lines >3em short 29.4 -> 35.3%)
and emptied the log of underfull warnings, which was the goalposts
moving rather than a gain. Reverted; the preamble says not to try
it again without measuring.
2. \linepenalty=30: no measurable change on this sample. Kept.
3. finite \RaggedRightParfillskip: inert as set — 0.75\textwidth is
322.5pt of stretch, past the 90th percentile of last-line rag, so
it never incurs badness. Kept, pending a value that bites.
4. protrusion factor 1100 -> 1500: below the resolution of a
line-ending metric; it changes how even the rag looks, not where
lines break. Kept, unquantified.
5. \emergencystretch was set to 3em and silently overridden to 1em
lower down; the override is gone. No visual effect (zero overfull
either way), but the conflict was real.
Also fixed: \RaggedRight assigns \rightskip, \parfillskip AND \parindent
from its own parameters at every invocation, so setting those directly
does nothing. All three are now set as \RaggedRight* before the call.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
It is assembled from src/preamble.tex, src/colophon.tex and work/pages
each build, so it churned in the diff and carried no information the
tracked sources do not.
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>