我以为我已经创建了一个非常简单的命令,但显然这是不允许的。我怀疑我需要\expandafter
在某个地方添加,但我不确定(在哪里)。我想详细了解原因。这是 MWE:
\documentclass{minimal}
\usepackage{xstring}
\usepackage{xcolor}
\newcommand{\getcolor}[1]{
\IfStrEqCase{#1}{
{r}{red}%
{b}{blue}%
}[#1]
}
\begin{document}
\getcolor{r} % prints 'red'
\getcolor{purple} % prints 'purple'
\textcolor{red}{text} % prints 'text' in red
\textcolor{\getcolor{r}}{text} % error
\end{document}
答案1
您的代码存在很大问题,因为\IfStrEqCase
它没有生成颜色名称,而是生成了打印它的指令集。
您可以使用可扩展测试。
\documentclass{article}
\usepackage{xcolor}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\getcolor}{m}
{
\str_case:nnF { #1 }
{
{r}{red}
{b}{blue}
}
{#1}
}
\ExplSyntaxOff
\begin{document}
\getcolor{r} % prints 'red'
\getcolor{purple} % prints 'purple'
\textcolor{red}{text} % prints 'text' in red
\textcolor{\getcolor{r}}{text} % prints 'text' in red
\textcolor{\getcolor{purple}}{text} % prints 'text' in purple
\end{document}
如果您的 LaTeX 安装不是最新的,您可能会收到错误。在这种情况下,请添加\usepackage{xparse}
,但您应该尽快升级。
请不要将其用作minimal
代码示例,它不适用于此目的。