Guide
Why a letter-spaced heading breaks, and why some resumes arrive as SoftwareEngineer
A PDF often does not contain the spaces you can see — they are inferred from the gaps between glyphs. One threshold decides, and there are two ways to fall off it: track a heading too wide and every letter gets a space, set words too tight and they run together.
Last updated
Why a file would not contain its own spaces
Because a PDF is closer to a set of drawing instructions than to a document. Text is placed: here is a font, here is a position, draw these glyphs. Whether a space character is in the stream at all is up to whatever produced the file, and plenty of producers — especially design tools, and anything that kerns or justifies carefully — simply advance the position instead.
So a reader that trusted only the characters would return SoftwareEngineer from a line that looks perfectly ordinary on screen. The space is real, it is visible, and it is not a character. It is a distance.
We know because Haisleaf imports resumes from PDF, so it has to make this call on every gap of every line. What follows is our threshold. The number is ours; the need to pick one is forced on anything reading a PDF.
One threshold, two ways to fall off it
A quarter of an em is comfortably below a real word space and comfortably above the sub-pixel drift between two runs of a single word. That makes it a good line — and a line is still a line, with a side you can end up on by accident:
| Gap | How you get there | What comes out |
|---|---|---|
| Under 0.25em | Tight tracking, or a run split mid-word by kerning | No space inserted — SoftwareEngineer, or Sof tware |
| Around 0.25em | An ordinary word space | One space — correct |
| Over 0.25em | A heading tracked out for display | A space after every letter — E X P E R I E N C E |
The middle row is the one everybody assumes is the only row. The other two are what a resume actually hits.
The tracked-out heading
Letter-spacing a section heading is a normal typographic move — EXPERIENCE reads as a deliberate label rather than as a shout. The problem is that tracking is implemented by increasing the distance between glyphs, and past a quarter of an em that distance is indistinguishable from a space.
So the heading arrives as E X P E R I E N C E. A keyword search for “experience” does not match it. A section-detector looking for a known heading does not recognise it. The section is still there and its title has stopped being a word.
The caveat, because it is not universal: this needs the producer to have positioned each glyph separately, which is usual for tracked display type exported from a design tool. Some producers emit one run plus a character-spacing instruction, and then there is no gap to misread. You cannot tell which yours did by looking at it — which is the argument for not relying on it either way.
The words that fuse
The other direction is quieter and more common. Gaps below the threshold produce SoftwareEngineer — and a variant that is worse, because kerning can split one word across two runs and leave a gap in the middle: Sof tware.
Neither the characters nor the run boundaries can tell those two cases apart. Only the gap can — and the gap is exactly what is ambiguous. A reader that raised its threshold to catch Sof tware would start dropping real spaces somewhere else.
And once the text exists, it cannot be repaired. Collapsing whitespace fixes runs of spaces, not single ones inserted where they do not belong — so E X P E R I E N C E stays exactly as it is, all the way through.
What we do in our own templates
It would be a poor guide that told you to avoid a thing we do. So, checked against our stylesheet: the widest tracking on any section title in any Haisleaf template is 0.14em, and the widest anywhere at all — on one display headline — is 0.18em. Both sit under the quarter-em line, with room.
That is the whole trick, and it is available to any document: you can track a heading for the look of it. You just cannot track it past the point where the spacing stops being spacing and starts being spaces.
What to do
- Keep tracking under about a quarter of the type size. In most editors that is a small positive number, not a dramatic one. If a heading looks airy enough to be a design choice, it is probably already too wide.
- Never let a heading be the only copy of its own word. If Experience appears tracked out in the heading and nowhere else, the document has no readable instance of it.
- Do not fix it with real spaces. Typing E X P E R I E N C E by hand produces the broken output directly, and reliably, on every reader.
- Read it back. Select all, paste into a plain-text editor, and search for your section headings. If a search for “experience” finds nothing, you have this problem.
Haisleaf exports plain text alongside every PDF, from the same document, so step four is one click. The rest of what a parser keeps and drops is in what an applicant tracking system actually reads, and the same threshold at a larger scale — where the gap is a gutter rather than a letter — is in why two-column resumes get scrambled.