[Tex/LaTex] Multiplying a length by a factor

calculationslengthsline-spacingvertical alignment

I am trying to create a package that will use grid typesetting (in the humanities, so not much of a problem) but that should allow the user to freely set the \baselinestretch. I am using the memoir class as a basis.

In order to do so, I have defined some font sizes, and calculated the amount of space which I should add, for instance after a \Large heading, so as to preserve the vertical alignment; then I am setting the lengths accordingly. So, for instance:

\renewcommand{\baselinestretch}{1.1}\selectfont
\renewcommand*{\normalsize}{\fontsize{12}{14.5}\selectfont}
\renewcommand*{\Large}{\fontsize{17}{22}\selectfont}
\def\addto@Large{7.7pt}

\setlength{\beforechapskip}{\addto@Large}
\addtolength{\beforechapskip}{\baselineskip}

It works so far, but I would like to be able to change \baselinestretch at will. In order to do that, I basically need to define my \addto@Large command for a stretch factor of one (so that would be 7pt here), and then multiply it by the \baselinestretch factor.

Is it possible, and if so, how can I do that?

Best Answer

You have several choices. For example define \addto@Large as a dimen parameter:

 \newdimen\addto@Large
 \addto@Large=7pt

 \setlength{\beforechapskip}{\baselinestretch\addto@Large}
 \addtolength{\beforechapskip}{\baselinestretch\baselineskip}

You can also do in one swoop, by using \dimexpr:

 \setlength\beforechapskip{\baselinestretch\dimexpr\addto@Large+\baselineskip\relax}

In this case \addto@Large can also be defined as you did; but it's best to have it as a dimen parameter.

Related Question