CVs Letters

Layout Rules

How these are measured

There is one rule

Every line you type has to fit on the line it is rendered as. Everything below is that rule applied to a particular box on the page.

It matters because of how the CV is built. When you type three profile lines, the generator does not hand LaTeX a paragraph to break wherever it likes — it joins your lines with a forced break, one for each line you wrote. So a line that is too wide is not quietly re-flowed. LaTeX breaks it where it runs out of room and the words left over land on a line of their own:

you typed:   ...with experience in AI, quality assurance, and software development, and a
you get:     ...with experience in AI, quality assurance, and software development, and
             a

That stray "a" costs a whole line of the page and reads as a mistake. It is the reason the editor now measures each line as you type it, and the reason a line that does not fit is an error rather than a warning.

How a line is measured

Not by counting characters. A character count cannot answer the question, because the same 90 characters are half a line of i and an overflowing line of w. Instead the width of the text is added up glyph by glyph, in the font the PDF is really set in — Latin Modern Sans 10 at 9.963 pt — and compared with the measured width of the column it is rendered into.

The editor runs that arithmetic in your browser, from /api/metrics, and the exporter runs the identical arithmetic on the server against the identical table. The percentage under an input and the error that blocks an export therefore cannot disagree.

The character figures in the tables below are a budget, not the rule: they say roughly how many characters of ordinary prose fit across that column, which is a useful thing to know while writing. A line of narrow letters may run past its figure and still fit; a line of wide ones may fall short of it and not. Nothing here is set by hand — change cv.tex.j2 and every number moves with it.

One deliberate strictness: TeX will squeeze a line up to about 3% over by compressing the spaces between its words, and left to itself it sometimes does. The editor does not allow it. A line that only fits because its spaces were compressed sits visibly tighter than the lines around it, and a rule that depends on the paragraph breaker's mood is not one you can write to. A line is judged at normal word spacing, so every line on the page is set the same way.

Header

FieldLimitNote
Full name (first + last)21 charsCombined, including space
Contact text (phone, email, LinkedIn…)54 charsDisplayed text, not the URL

Profile

FieldLimitNote
Profile line127 charsEach line of the profile paragraph
Profile lines1 to 4Every line but the last must be full, and none may overflow — see Line breaks

Experience

Column split: 73% left (title, company, summary, bullets) · 27% right (date, location)

FieldLimitNote
Title + company (combined)84 charsBoth on the same line, separated by ", "
Date32 charsRight column
Location32 charsRight column, below date
Summary line92 charsEach line of the summary paragraph — see Line breaks
Bullet point line123 charsEach line within a bullet — see Line breaks

Projects

A project entry has the same fields as an experience entry and is checked against the same limits — the section header is the only difference. "Context" (client, school, "Projet personnel") is stored in the company field, so it counts towards the combined title limit above.

FieldLimitNote
Title + context (combined)84 charsSame cap as title + company
Date / Location32 / 32 charsRight column
Summary line92 charsSee Line breaks
Bullet point line123 charsSee Line breaks

Education

FieldLimitNote
Degree84 charsLeft column (73%)
Date32 charsRight column
Institution34 charsRight column, below date

Certifications

FieldLimitNote
Certification name113 charsSingle line
Year4 charsRight side, e.g. 2024

Languages

FieldLimitNote
The whole line117 charsThe section is one line: "Arabe (Langue maternelle), Français (Courant)". This joined width is the rule
Language name27 charsA share of that line, as guidance — e.g. "Français"
Level30 charsA share of that line, as guidance — e.g. "Langue maternelle"
Max languages shown4Entries beyond this are ignored

Where you break a line

The profile, every summary and every bullet are stored line by line, and each stored line becomes a forced break in the PDF. LaTeX cannot move a word across one of your breaks, so where you put them is where they stay.

SituationLevelWhat to do
A line is wider than its column Error LaTeX breaks it for you and strands the last word or two on a line of their own. The editor names the stranded words and says how many characters to cut. Saving and exporting are both blocked.
A line stops while the first word of the next line would still have fitted Error Leaves a visible hole mid-paragraph. Pull the word up, or merge the two lines.
A line covers less than 85% of its column, but the next word genuinely does not fit Warning The line will look sparse — reword it if you can. Export is still allowed.
The last line of a field is short Allowed That is how a paragraph ends. It still may not be too wide.

Bullets are judged one bullet at a time — a short bullet next to a long one is fine, and only breaks inside a single bullet are suspect.

Page budget

One page, filled. An A4 page with these margins holds 62.0 lines at the 10 pt class's 12 pt baseline, and a CV has to reach 60.5 of them to count as filling it.

What costs a lineCost
Each rendered line of profile, summary or bullet text1
An experience or project entry's title row1
An entry's Technologies line1
Each education entry (degree + field)2
Each certification1
Each skill group1
The languages row2 + 0.44
Each section heading after the first1.33
Each bullet after the first in an entry0.08

The last two used to cost nothing, which is how a CV could measure "52 of 52" with no issues at all and still print onto a second page: seven section headings take up about nine lines of a page that nothing was charging for. They are measured now, off a compiled PDF, like everything else.

Note that the count is of rendered lines, not typed ones. A line too wide for its column costs two, which is the other half of why an overflowing line is an error.