A 200-page novel, typeset in a day
A manuscript arrived as a Word file with 3,345 paragraphs and not a single paragraph style. I built the typesetting system and delivered the interiors the same day. The system is the deliverable; the book is what came out of it.
What the original looked like
3,345 paragraphs, all direct formatting, no styles and no page breaks. Chapters were separated by runs of thirty to thirty-seven empty paragraphs, with another thousand or so blank lines scattered through the text. Dialogue was opened with six different characters or pairs of characters: one of them 178 times, the rest eight, five, three, two and two. Chapter titles had been typed with spaces between the letters, C A P Í T U L O I, which breaks justification and hyphenation. Every paragraph carried a negative right indent that pushed the text outside the margin.
None of that is unusual. It is what a manuscript looks like when a writer writes and nobody in between formats.
The thing that made it automatable
Not a single style was declared, but the point sizes were consistent all the way through. 24pt for parts, 18pt bold for chapters, 14pt bold for subtitles, 12pt for body, italics for the letters. That meant the structure could be inferred from the type sizes instead of guessed at, which turns the whole extraction into a set of rules rather than a judgment call on every paragraph.
The extractor turned 1,628 paragraphs into 27 files, 23 chapters, no exceptions and nothing left unclassified. Then it verified itself: it compared, character by character, the 1,555 body paragraphs of the manuscript against what ended up in the files, after stripping the typesetting syntax back out. Without that comparison a paragraph swallowed by a classification rule goes unnoticed until someone reads the galleys.
Measuring instead of trusting
I asked for 15.5pt of leading and the page came back with 11.3 from baseline to baseline, lines nearly touching. In Typst, leading is the gap between line boxes, not the distance between baselines, and the height of the box comes from the font metrics. Fixing the box so the number meant what it says put the book at 197 pages instead of 154.
That is a 43-page difference produced by a setting that looked correct and compiled without a warning. The number to trust is the one you measure on the page.
Decisions get compared, not argued
Every design decision was made against a bank: the entire book compiled once per variant, with all three anchored on the same sentence rather than the same page number, because different leading moves the text and comparing page 14 to page 14 compares nothing.
The letters are the case where the bank changed the answer. Italics were the obvious default and it is what everyone does. But the letters run for nine straight pages, and italics are made to mark a short passage inside roman text, not to carry a long read: at that length the eye loses the shape differences it uses to recognise words. A narrower measure says "this is another voice" at a glance and stays comfortable. It cost two pages.
What I threw away
I built drop caps, tested them, and dropped them. They worked, the book stayed at the same length with any of the three variants, and the hanging dialogue dash sat correctly in the nine chapters that open with someone speaking.
What killed them was not in the bank. Ten of the twenty-six openings have a first paragraph shorter than two lines, and one of them is a single sentence. Next to a drop cap that leaves a hole. The feature would have looked good through half the book and broken through the other half. It is still in the system and turns on by changing one line, if a different manuscript ever wants it.
The part that travels furthest
The first reports I generated flagged things by paragraph number. Paragraph 1287. That is a coordinate inside the Word file, and the editor does not have the Word file, she has the PDF. A reference the other person cannot use is not a reference.
So the tooling now opens the compiled PDF and locates every mark as a page and a line, counting from the first line of text on that page. It finds the mark even when it falls across a line break, because it rejoins hyphenated words before searching, and if it cannot find one it says so instead of quietly dropping the row. That forced an order on the build: extract, compile, locate. It is the rule from this project I have reused most since, and it has nothing to do with books.
What it does not do
This is one book, so what looks generic is really "what this novel needed". I did not extract a library, and that was deliberate: parameterising from a single case means guessing what the next book will ask for. What exists instead is a written inventory of which files are generic and which are specific, so the second book starts by copying this one and deleting the parts that belong to it. The library gets extracted when there is a second case to extract it from.
The other limit is honest: a day was possible because the manuscript, for all its mess, was mechanically consistent. A file where the type sizes wander would have moved the work from writing rules to checking paragraphs, and that is a different job with a different estimate.
The novel is Hermana, by Eduardo Marcial Paz. Interiors delivered 21 August 2026.