我正在尝试创建一个命令来用一个参数修改字体大小,但似乎参数没有正确扩展:
\newcommand{\mycfs}[1]{\fontsize{#1pt}{1.2*#1pt}}
答案1
如果使用因子,请省略 *。此外,引入一个可以相乘的长度宏。如果需要,请添加\selectfont
以使其有效:
\newlength{\mysize}
\newcommand{\mycfs}[1]{\setlength{\mysize}{#1pt}%
\fontsize{\mysize}{1.2\mysize}\selectfont}
答案2
这是可行的,使用 e-TeX 功能来动态计算基线跳过:
\newcommand{\mycfs}[1]{\fontsize{#1pt}{\dimexpr 1.2pt*#1pt\relax}}
或者这个解决方案,不使用 e-TeX,而是使用中间维度寄存器,因此稍微复杂一些:
\newdimen\mycfsdim
\newcommand{\mycfs}[1]{\mycfsdim=#1pt \mycfsdim=1.2\mycfsdim
\fontsize{#1pt}{\the\mycfsdim}\selectfont}
答案3
首先:一般不建议随意调整字体大小。当然,你也需要一个可缩放的字体,否则将选择下一个合适的字体。
用法1.2*#1pt
一般不起作用。您可以使用它1.2\somedimension
来计算乘法。
\newlength{\mylength}
\makeatletter
\newcommand{\mycfs}[1]{%
\setlength{\mylength}{#1pt}%
\setlength{\mylength}{1.2\mylength}%
\fontsize{#1}{\mylength}%
\selectfont
}
\makeatother
但是,一些(但不是全部)字体大小宏(\normalsize
、\small
和\footnotesize
)也会更改其他设置,例如\abovedisplayskip
、\belowdisplayskip
和。为了获得一致的行为,最好在更改为您的字体大小之前切换到已知的字体大小,例如在宏代码的前面添加。如果您知道如何操作,您也可以自己调整上述参数;我的意思是正确地操作。\abovedisplayshortskip
\belowdisplayshortskip
\normalsize
所有字体大小宏也会将自身存储到 中\@currsize
,例如\small
包括\let\@currsize\small
,但前提是\ifx \protect \@typeset@protect
。这是通过调用 来完成的,\@setfontsize
但这对于您的情况不可用。但是,可以手动添加:
\newlength{\mylength}
\makeatletter
\newcommand{\mycfs}[1]{%
\normalsize
\ifx\protect\@typeset@protect
\def\@currsize{\mycfs{#1}}%
\fi
\setlength{\mylength}{#1pt}%
\setlength{\mylength}{1.2\mylength}%
\fontsize{#1}{\mylength}%
\selectfont
}
\makeatother
您可以进一步改进这一点,通过使用 LaTeX 允许输入为 pt 或任何长度的数字\@defaultunits
(因为它本身就是完成的\fontsize
):
\newlength{\mylength}
\makeatletter
\newcommand{\mycfs}[1]{%
\normalsize
\@defaultunits\mylength=#1pt\relax\@nnil
\edef\@tempa{{\strip@pt\mylength}}%
\ifx\protect\@typeset@protect
\edef\@currsize{\noexpand\mycfs\@tempa}% store calculated size
\fi
\mylength=1.2\mylength
\edef\@tempa{\@tempa{\strip@pt\mylength}}%
\@tempa
\expandafter\fontsize\@tempa
\selectfont
}
\makeatother