用户定义命令中的算术运算

用户定义命令中的算术运算

我想定义一个命令来简化字体配置,如下所示:

\newcommand{\setfont}[2]{\fontsize{#1}{#2}\selectfont}

新的命令\setfont接受两个参数:一个是字体的大小,另一个是行距。

但是,直接以点为单位指定行距并不方便。更直观的方法是设置,例如两倍行距或 1.5 倍行距。因此,在我的命令中,我想将第二个参数设为比例因子。问题是如何将比例因子应用于行距参数?使用算术运算还是其他解决方法?

答案1

以下是实现此目的的一种方式:

在此处输入图片描述

\documentclass{article}
\usepackage{lmodern,lipsum,setspace}% http://ctan.org/pkg/{lmodern,lipsum,setspace}
\newcommand{\setfont}[2]{\setstretch{#2}\fontsize{#1}{#1}\selectfont}
\begin{document}
\lipsum[2]

\setfont{20}{1.5}\lipsum[2]
\end{document}

请注意,它\fontsize接受两个参数,但不一定非要是维度。因此,使用比例因子和维度乘法的组合可能无法按预期工作(尚未测试)。setspace包裹提供\setstretch{<num>}帮助,同时还管理其他事物。

还要记住,行距因素并不总是像看上去的那样。参见为何线扩展因子如此呢?

答案2

TeX可以像 中一样乘以维度1.5\dimenregister。因此,您可以做的是将 #1 分配给临时维度寄存器并将其乘以。

这有效:

\documentclass{article}

\makeatletter
\newcommand\setfont[2]{\@tempdima=#1\fontsize{\@tempdima}{#2\@tempdima}%
  \selectfont}
\makeatother

\begin{document}

\setfont{25pt}{1.5} Test\\ test

\end{document}

PS Dan 在评论中建议进行增强,允许以下命令\setfont{25}{1.5}

\makeatletter
\newcommand\setfont[2]{\@defaultunits\@tempdima#1pt\relax\@nnil
   \fontsize{\@tempdima}{#2\@tempdima}\selectfont}
\makeatother

相关内容