Size of interline in pt?
When metal type was used, characters were cut on pieces of metal having all the same size, independent of ascenders and descenders
Source: http://designwithfontforge.com/en-US/The_EM_Square.html (Note that the picture has been mirrored in order to ease reading.)
Lines could be spaced by inserting strips of metal (mostly made of lead, so “leading”).
TeX uses a different model for this, because it just aligns characters by their reference point, so its model is different: it tries to keep a fixed distance between baselines (the amount of the current \baselineskip
).
What 18pt leading means is rather ambiguous. As you see, in the picture there is no leading, but the characters don't touch: “yp” is just above “th”, but there's some space between them. This is because the height of the piece carrying a character is greater than the sum of maximum height and maximum depth among all characters (the same length as a strut).
So you could refer to 18pt between the deepest possible descender on a line and the highest possible ascender on the next line; or you could measure the 18pt from the depth and height of a strut. This will give quite different results.
The suggested leading
package can solve the issue, because it allows specifying the baseline distance in points, rather than computing a factor for \linespread
. However, a simplistic
\leading{18pt}
will not do:
\documentclass[12pt]{article}
\usepackage{leading}
\leading{18pt}
\begin{document}
\noindent
\llap{\smash{%
\vrule height0pt depth \fontchardp\font`y \hskip 1pt
\vrule height0pt depth \dimexpr\fontchardp\font`y + 18pt\relax
}}by\\
by
\end{document}
The image makes clear that 18pt is the baselineskip.
\documentclass[12pt]{article}
\usepackage{leading}
\AtBeginDocument{%
\settoheight{\dimen0}{%
ABCDEFGHIJKLMNOPQRSTUVWXYZ%
abcdefghijklmnopqrstuvwxyz%
}%
\settodepth{\dimen2}{%
ABCDEFGHIJKLMNOPQRSTUVWXYZ%
abcdefghijklmnopqrstuvwxyz%
}%
\leading{\dimexpr18pt+\dimen0+\dimen2}%
}
\begin{document}
\noindent
\llap{\smash{%
\vrule height0pt depth \fontchardp\font`y \hskip 1pt
\vrule height0pt depth \dimexpr\fontchardp\font`y + 18pt\relax
}}by\\
by
\end{document}
Now there are exactly 18pt from the bottom of the y to the top of the b.
If you use accented uppercase characters, you might have to fix the alphabet used for measuring the maximum height and depth.
TeX uses three primitive registers which control the interline spaces. First of them is \baselineskip
. If the two followed lines are not overlapped in sense of \lineskiplimit
register then \baselineskip
is used as the distance of two following baselines. The "overlapping in sense of \lineskiplimit
register" (it is set to 0pt by default but it should be positive or [more usual] negative) means: the distance between biggest descender in the first line and the biggest ascender in the second line (when the rule with \baselineskip
is tried) is greater or equal to \lineskiplimit
. If such condition is not true then \baselineskip
is not used for these two lines at all, but the \lineskip
is inserted between such lines (default 1pt by plain TeX).
Examples: if you set \lineskiplimit
to sufficient negative value then all lines have \baselineskip
distance independent of they are overlapped or not.
If you set \lineskiplimit
and \baselineskip
to 0pt then \lineskip
is inserted between all lines and the baseline grid is typically lost.
Note, that \baselineskip
nad \lineskip
are "skip" registers (they may include stretchability and/or shrinkability) but \lineskiplimit
is "dimen" register.