我使用以下代码定义了新的字体大小开关。
\makeatletter
\newcommand{\vi@mult}{2.986}
\newcommand{\HUGE}{\normalsize%
\@setfontsize\HUGE{\vi@mult\dimexpr\f@size pt\relax}{\vi@mult\dimexpr\f@baselineskip\relax}%
}
\makeatother
是否可以重写这个定义,以便我可以\foo
使用如下宏定义新的字体大小开关?
\newcommand{\newfontsize}[2]{%
\csdef{#1}{%
\normalfont%
\@setfontsize\csname #1\endcsname{#2\dimexpr\f@size pt\relax}{#2\dimexpr\f@baselineskip\relax}% This line produces an error.
}%
}
\newfontsize{foo}{3.583}
答案1
\@setfontsize
定义在 中latex.ltx
采用三个不分隔的参数。在您的第一个示例中,它是:
\@setfontsize\HUGE{\vi@mult\dimexpr\f@size pt\relax}{\vi@mult\dimexpr\f@baselineskip\relax}
第一个参数是\HUGE
,第二个\vi@mult\dimexpr\f@size pt\relax
和第三个参数是vi@mult\dimexpr\f@baselineskip\relax
。但是在第二个例子中
\@setfontsize\csname foo\endcsname{#2\dimexpr\f@size pt\relax}{#2\dimexpr\f@baselineskip\relax}
中的第一个参数\csname
,第二个f
和第三个o
。这不是你想要的。使用\expandafter
:
\expandafter\@setfontsize\csname foo\endcsname{#2\dimexpr\f@size pt\relax}{#2\dimexpr\f@baselineskip\relax}
运行并创建。然后有参数:,和。也许\expanafter
,这就是你想要的。\csname foo\endcsname
\foo
\@setfontsize
\foo
3.583\dimexpr\f@size pt\relax
3.583\dimexpr\f@baselineskip\relax