diff --git a/src/preamble.tex b/src/preamble.tex index 9854709..22139a2 100644 --- a/src/preamble.tex +++ b/src/preamble.tex @@ -30,14 +30,36 @@ % ---- typographic settings ------------------------------------------------- % Ragged right: the original is a typescript, and unjustified setting keeps the % word spacing even — with hyphenation still on, so the rag stays shallow. +% ragged2e's \RaggedRight assigns \rightskip, \parfillskip AND \parindent from its +% own parameters every time it runs, so setting those three directly does nothing — +% they must be set as \RaggedRight*, and before the invocation below. (All three are +% \newlength; the parameter is \RaggedRightRightskip, lowercase s.) +% +% Permitted rag stays at ragged2e's 2em default. Raising it to 4em was tried on +% 2026-09-14 on the theory that giving the breaker more freedom would smooth the rag; +% measured against the same 102 lines it made every statistic worse — median rag +% 22.8 -> 24.8pt, sd 79.6 -> 89.1, lines more than 3em short 29.4% -> 35.3%. It also +% emptied the log of underfull-box warnings, which looked like a win and was only the +% goalposts moving. Do not raise it again without measuring (tools: work/rag.py). +\setlength{\RaggedRightRightskip}{0pt plus 2em} +% Lever 3: the default \parfillskip of 0pt plus 1fil accepts a last line of any length. +% A finite fill makes TeX score a very short last line as badness and rearrange to +% avoid one. +\setlength{\RaggedRightParfillskip}{0pt plus 0.75\textwidth} +% The first line indents 1.6em; set here so \RaggedRight applies it rather than +% relying on the direct \parindent assignment further down to repair it afterwards. +\setlength{\RaggedRightParindent}{1.6em} \RaggedRight +% Lever 2: prefer paragraphs with fewer lines, which removes stragglers. Operates +% strictly within a paragraph — it cannot move a paragraph boundary. +\linepenalty=30 \frenchspacing \hyphenpenalty=10000 \lefthyphenmin=62 \righthyphenmin=62 \exhyphenpenalty=50 % an already-typed hyphen may still end a line, as in the original \tolerance=4000 \emergencystretch=3em % Hanging punctuation. Dashes are wide, so they hang far less than the small % marks; quotes and full stops carry the effect. -\microtypesetup{protrusion=true,expansion=false,factor=1100} +\microtypesetup{protrusion=true,expansion=false,factor=1500} \SetProtrusion{encoding=*,family=*}{\textemdash={50,50},\textendash={80,80}} % No widows, no orphans, and a ragged bottom so pages are never stretched to % force them out. @@ -58,18 +80,23 @@ \pgmarknote{#1}{\color{black!45}\rule[-0.3ex]{0.5pt}{1.8ex}}\hspace{0.15em}\fi\ignorespaces} % \plateop{N}{no}{img}{caption}: a plate that begins original page N — the % page mark stays with the plate wherever it is placed. -% Built at \linewidth, never \textwidth: on four pages the original interrupts a -% displayed quotation with a plate (p0129/30/31/32, p0217/18, p0386/87), and inside -% extract's \addmargin the paragraph is set by \parshape to \linewidth. A minipage -% at \textwidth overhung the measure there by the quotation's 0.8in indent — which -% is also \marginparwidth, a coincidence that made it look like a margin-note fault. +% A plate is a whole page of somebody else's book, so it is set to the FULL text +% measure even where it falls inside a displayed quotation — which the original does +% on four pages (p0129/30/31/32, p0217/18, p0386/87). Inside extract's \addmargin the +% enclosing \hsize is still the full measure; only \parshape narrows the paragraph. +% \platefullmeasure resets that shape for the plate's own paragraph, which fixes both +% faults at once: the minipage no longer overhangs (it did, by the quotation's 0.8in +% indent — also \marginparwidth, a coincidence that long disguised the cause), and +% plates 51 and 99, the two of the four whose width rather than height is the binding +% constraint, are no longer reproduced 13.4% small. +\newcommand{\platefullmeasure}{\parshape 1 0pt \hsize\relax} % NB \marginnote cannot place a note inside a minipage — it falls back to % setting it inline, which overflows the measure when the plate fills the full % width. So the page mark goes outside the minipage. -\newcommand{\plateop}[4]{\par\medskip\noindent\InsertMark{origpg}{#1}% +\newcommand{\plateop}[4]{\par\medskip\platefullmeasure\noindent\InsertMark{origpg}{#1}% \hypertarget{page.#1}{}\pgmarknote{#1}% - \begin{minipage}{\linewidth}\centering - \includegraphics[width=\linewidth,height=0.74\textheight,keepaspectratio]{#3}\par\smallskip + \begin{minipage}{\hsize}\centering + \includegraphics[width=\hsize,height=0.74\textheight,keepaspectratio]{#3}\par\smallskip {\footnotesize\setstretch{1.05}\raggedright #2. #4\par}\end{minipage}\par\medskip} % \notesection: the endnotes set a step smaller and tighter than the text — % there are hundreds of them and they are consulted, not read through. @@ -230,8 +257,8 @@ \begin{center}\ifdim\wd\figbox>\linewidth \resizebox{\linewidth}{!}{\usebox{\figbox}}\else\usebox{\figbox}\fi \end{center}\par\medskip} -\newcommand{\plate}[3]{\par\medskip\noindent\begin{minipage}{\linewidth}\centering - \includegraphics[width=\linewidth,height=0.74\textheight,keepaspectratio]{#2}\par\smallskip +\newcommand{\plate}[3]{\par\medskip\platefullmeasure\noindent\begin{minipage}{\hsize}\centering + \includegraphics[width=\hsize,height=0.74\textheight,keepaspectratio]{#2}\par\smallskip {\footnotesize\setstretch{1.05}\raggedright #1. #3\par}\end{minipage}\par\medskip} % \ig{img}: an inline type specimen cut from the 300 dpi scan by % tools/crop_inline.py, set at its natural size (1 px = 1/300 in) so that @@ -273,12 +300,9 @@ % by a blank line and never indents, but it is justified, so its blank line has % a full flush line above it to sit against. Reflowed and ragged right, that cue % is much weaker, and the indent carries it instead. (Sammay, 2026-09-14.) -% NB ragged2e's \RaggedRight sets \parindent from \RaggedRightParindent, so both -% must be set or every later \RaggedRight silently zeroes the indent again. -\setlength{\RaggedRightParindent}{1.6em} +% \RaggedRightParindent is set with the other ragged2e parameters at the head of this +% file, where \RaggedRight can read it; this direct assignment only guards the value +% against anything that resets \parindent afterwards. \setlength{\parindent}{1.6em} -% transliterated words carry no hyphenation patterns; let TeX stretch a line -% rather than overrun the measure by a few points. -\setlength{\emergencystretch}{1em} \raggedbottom \setcounter{secnumdepth}{0}