Rhythm: different values for parskip and baselineskip in scrartcl

I am writing some small demo files, each trying to implement a specific advice from Bringhurst's Elements of Typograhpic Style. He recommends to keep the vertical rhythm of the page, and to return to it when necessary. One of the effects of this is that lines on facing pages are on the same depth.

I want to understand how the individual vertical measures are calculated, and I don't know where to gather this information from the sources. So I did some experiments with scrartcl; here are two extremes:

\documentclass[a4paper,10pt,parskip=full]{scrartcl}
\usepackage{fontspec}
\begin{document}
lineskip: \the\lineskip\\
baselineskip: \the\baselineskip\\
baselinestretch: \baselinestretch\\
parskip: \the\parskip\\


gives me
baselineskip: 12pt and parskip: 12pt plus 1.20007pt.
They are almost equal, and as I used parskip=full, this makes sense to me.

\documentclass[a4paper,12pt,parskip=full]{scrartcl}
\usepackage{fontspec}
\begin{document}


results in
baselineskip: 17.39995pt and parskip: 14.5pt plus 1.45009pt.
With these setting, parskip=full is not full at all, and trying to go back to the desired rhythm requires using some odd vertical spaces.

When implementing Bringhurst's recommendation while using a document class such as scrartcl, I might have to redefine almost every vertical space used thourghout (at least, this is what I'm expecting, or fearing).

• Where does the demonstrated difference between baselinskip and parskip come from? Why?
• Should I use scrartcl (or other koma-script classes) at all if I want to implement such a recommendation?

ADDED: Michels's suggestion to look for gridding led me to a package (V0.1, 2008 ...) by Markus Kohm, gridset. It provides a command which skips to the next vertical position on a \baselineskip grid. Now it is possible to deliberately depart from the grid (maybe for a block quotation), and then return to it:

\blindtext\\[0.5\baselineskip]
\emph{blindtext}
\vskipnextgrid
\blindtext


In this example the effect of \vskipnextgrid is a vspace of half a lead.I also tested this with math formulas. The result is more or less satisfying and the quality heavily depends on the surrounding material, but this is also the case for a hand-adjusted solution. If it can't work, it won't.

Regarding my question about the \parskip set by scrartcl: I managed to find a spot where it seems to be done, but it seems to be unaffected by linespread (scrartcl.cls, line 378):

\setparsizes{\z@}{\baselineskip \@plus .1\baselineskip}{%
1em \@plus 1fil}%


If I understand the code correctly, parskip (being the second argument) is set to \baselineskip. This should be the baselineskip actually used in the document, but the change made by \linepread{1.2} has no effect here. Calling \setparsizes{.}{.}{.} in the document also has no effect.

-
If you do some searching on grid typesetting, there are some questions about this floating around. Consensus is that it can't really be done with LaTeX; ConTeXt appears to provide somewhat better support for grid typesetting. – Michel Apr 14 '11 at 11:24
Grids didn't come to my mind because I focused on single lines and their relation, and only vertical spacing, not horizontal. Bot now that you mention it - yes, grids are related to my question. – Christoph Apr 14 '11 at 11:40
The concept of stretchability is deeply ingrained into classes and packages from which LaTeX derives so much value. Ridding them all of stretchability or not being able to use them seems to me like a Hercules task. Is it worth it? – Christian Lindig Apr 14 '11 at 18:13
@Christian: Yesterday I wrote that I might need to remove all those stretchable measures. Maybe that's too much indeed, and not necessary. Knowing where the crucial spaces are, and how to adjust them, though, is necessary. That's what my first question is about. I searched though the whole scrartcl.cls, but until now didn't find the code that sets parskip to the value I'm not agreeing with. – Christoph Apr 15 '11 at 7:27

Not a complete answer, but a (hopefully) useful hint: The observed inattentiveness of the parskip=full class option to a change of \baselinestretch seems to be caused by the fontspec package. The following example (compiled with XeLaTeX, fontspec commented out) yields a value for \parskip of about 17.4 pt (i.e., the same as \baselineskip).

\documentclass[a4paper,12pt,parskip=full]{scrartcl}
% \usepackage{fontspec}
\begin{document}
lineskip: \the\lineskip\\
baselineskip: \the\baselineskip\\
baselinestretch: \baselinestretch\\
parskip: \the\parskip\\
\end{document}

-

Basically, if I've understood correctly, to be able to have vertical rhythm, you'd need to remove all vertical stretchability (/skip/rubber/glue, ie. those "plus x minus y"), and assign all vertical skips uniformly (say, before and after lists, displayed maths, horizontal alignments, etc.) so that the vertical rhythm is maintained.

Easiest would be to define them as multitudes of \baselineskip, but that might not give the most appealing outcome (this is where it turns into an art form ;-)). Your question shows that you're using LaTeX, so I am sorry not being able to list all the skips/rubber/glue that contribute to vertical stretchability, but at least with Plain-format, one that might go unnoticed is indeed the \parskip which gives (with its default setting) a little bit of vertical stretchability if need be. So that's one at least which you'd want to remove completely by saying: \parskip=0pt.

-
You understood me correctly! Removing all the skips, rubbers, and glues is what I will need to do to rigorously keep the rhythm, but if I need to manually add negative vertical space here and there, that's fine - as long as I know how much that would be. The koma-script documentation tells me how to turn a chapter heading into a single, normalsized line, only with LaTeX. That works. But as I read that parksip has all kinds of side-effects, I hesitated and didn't just turn it to a fixed, self-defined size. – Christoph Apr 14 '11 at 16:53