3

I'm writing a novel and I defined a set of commands for starting a new chapter:

%A
\newcommand{\AKapitel}[1]{\lettrine[lines=3, lraise=-0.2,findent=-22pt, nindent=14pt, loversize=0.26,slope=9pt]{A}{#1}}

%B
\newcommand{\BKapitel}[1]{\lettrine[lines=3, lraise=-0.2,findent=-9pt, nindent=5pt, loversize=0.26,slope=1pt]{B}{#1}}

%D
\newcommand{\DKapitel}[1]{\lettrine[lines=3, lraise=-0.2,findent=-8pt, nindent=7pt, loversize=0.26,slope=-4pt]{D}{#1}}

This way, I don't have to write out the lettrine parameters all the time. Works pretty well. But when I pick a different format (a4 instead of a5) or a different base font size, it gets messed up. So here is what I want to do: define a constant as factor and multiply all the parameters with it. Something like in this pseudocode:

scalefactor := 0.87
\newcommand{\AKapitel}[1]{\lettrine[lines=3, lraise=-0.2*scalefactor,findent=-22pt*scalefactor, nindent=14pt*scalefactor, loversize=0.26*scalefactor,slope=9pt*scalefactor]{A}{#1}}

How do I do this in actual latex code? Sorry for my limited knowledge about latex, I'm learning by doing.

  • Welcome to TeX.SX! Please make your code compilable (if possible), or at least complete it with \documentclass{...}, the required \usepackage's, \begin{document}, and \end{document}. That may seem tedious to you, but think of the extra work it represents for TeX.SX users willing to give you a hand. Help them help you: remove that one hurdle between you and a solution to your problem. – Adam Liter Sep 11 '14 at 19:02
  • I suggest the macros from the calculator package – user31729 Sep 11 '14 at 19:38
2

It is easier for the keys expecting a <dimen>. For those expecting a decimal, you need something extra, as this is not implemented in core LaTeX. I do it here with package xintexpr. Indeed its macros are expandable.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{lettrine}

\usepackage{xintexpr}

\newcommand\scalefactor {0.87}

\newcommand{\AKapitel}[1]{%
  \lettrine[lines=3,
  lraise=\xintRound {4}{\xinttheexpr-0.2*\scalefactor\relax},
  findent=\scalefactor\dimexpr-22pt\relax, 
  nindent=\scalefactor\dimexpr 14pt\relax,
  loversize=\xintRound {4}{\xinttheexpr 0.26*\scalefactor\relax},
  slope=\scalefactor\dimexpr 9pt\relax]{A}{#1}}

\begin{document}

\AKapitel {nd} hier ist ein Beispiel (Scale factor=\scalefactor).

\vspace{1.5cm}

\renewcommand\scalefactor {.5}

\AKapitel {nd} hier ist ein Beispiel (Scale factor=\scalefactor).

\vspace{1.5cm}
\renewcommand\scalefactor {.4176}

\AKapitel {nd} hier ist ein Beispiel (Scale factor=\scalefactor).

\vspace{1.5cm}
\renewcommand\scalefactor {.2}

\AKapitel {nd} hier ist ein Beispiel (Scale factor=\scalefactor).

\end{document}

multiply constant

Rather than xintexpr one may make do here with loading only xintfrac and then like loversize=\xintRound {4}{\xintMul {-0.26}{\scalefactor}} etc..

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.