我正在尝试更改字体大小,但以下操作没有按我预期的那样工作:
\def\tinyfont{tiny}
\def\scriptfont{scriptsize}
\newcommand{\setfontsize}[1]{%
\def\currentsize{#1}%
\ifx\tinyfont\currentsize%
\tiny%
\fi%
\ifx\scriptfont\currentsize%
\scriptsize%
\fi%
}
当像这样使用时,它将起作用:
{\setfontsize{tiny}Hello!}
但这样使用时,不是工作:
\newcommand{\myfontsize}{tiny}
{\setfontsize{tiny}Hello!}
问题:
- 如何让它工作?
- 为什么不工作?
- 编写一个函数将字体大小转换为文本(“tiny”、“scriptsize”……,“huge”、“Huge”)转换为正确的字体大小命令的“正确”方法是什么?
编辑:
针对评论 1. 和 2.,如何使其在保持if
比较的情况下工作,例如处理文本不是命令名称的情况,如:\setfontstyle{bf} => \bfseries
?
答案1
我想你想说:当我使用
\newcommand{\tinyfont}{tiny} % instead \def\tinyfont{tiny}
{\setfontsize{tiny}Hello!}
那么它就不起作用了。
原因是 LaTeX\newcommand
定义宏\tinyfont
时带\long
前缀。另一方面,您的代码包含,\def\currsize{#1}
因此宏\currsize
未带\long
前缀定义。两个相同的宏,第一个带,第二个不带,\long
不会被判定为相同\ifx
。您可以使用,或者您可以在代码中\newcommand*{\tinyfont}{tiny}
声明,或者您可以避免使用,或者您可以避免使用 LaTeX。\long\def\currsize{#1}
\newcommand