我正在写一本小说,并定义了一组用于开始新章节的命令:
%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}}
诸如此类。