如何将命令参数与常数相乘?

如何将命令参数与常数相乘?

我正在写一本小说,并定义了一组用于开始新章节的命令:

%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}}

这样,我就不必一直写出 lettrine 参数。效果很好。但是当我选择不同的格式(a4 而不是 a5)或不同的基本字体大小时,它就会变得混乱。所以我想这样做:定义一个常数作为因子,并将所有参数与其相乘。类似于以下伪代码:

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}}

我该如何在实际的乳胶代码中做到这一点?抱歉,我对乳胶的了解有限,我正在边做边学。

答案1

对于期望为 的键来说,这更容易<dimen>。对于那些期望为小数的键,你需要一些额外的东西,因为这没有在核心中实现LaTeX。我在这里用包来做xintexpr. 确实它的宏是可扩展的。

\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}

乘以常数

而不是xintexpr人们可以在这里只进行加载xintfrac然后loversize=\xintRound {4}{\xintMul {-0.26}{\scalefactor}}诸如此类。

相关内容