当变量存储在宏中时,比较不起作用?

当变量存储在宏中时,比较不起作用?

我正在尝试更改字体大小,但以下操作没有按我预期的那样工作:

\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!}

问题:

  1. 如何让它工作?
  2. 为什么不工作?
  3. 编写一个函数将字体大小转换为文本(“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

相关内容