如何使用宏的输出来获取另一个宏的多个参数?

如何使用宏的输出来获取另一个宏的多个参数?

以下是我的 MWE:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{etoolbox}

\newcommand{\test}[1]{%
\ifstrequal{#1}{bla}{{blu1}{blu2}}{{error}{schmerror}}
}

\newcommand{\switch}[2]{#2 #1}

\begin{document}

\test{bla} % this works

\switch12 % this works

\switch\test{bla} \\

\expandafter\switch\test{bla}

\expandafter\switch\expandafter{\test{bla}}

\switch{\test{bla}}

\end{document}

这是输出:

在此处输入图片描述

我试图让\switch宏将的输出\test{bla}作为参数,返回 blu2 blu2。但甚至没有\expendafter奏效。有什么办法可以让这样的事情发挥作用吗?

前两行只是确保两个命令都按预期工作。

我的第一次尝试\switch\text{bla},显然交换\test{bla}导致bla errorschmerror因为的参数\test不是bla。(我认为它是\par标记,因为如果我省略,下一次尝试将在同一行输出\\。)

我的第二次尝试,\expandafter\switch\test{bla},只是返回 bla。据我所知,\test在扩展时, 只是被替换为空,而 \switch 会切换{bla}为某个内容(虽然不知道是什么)。起初我想知道这是否是由于不可扩展而导致的\ifstrequal,这可能会导致\test扩展为,但下一次尝试应该会显示相同的行为。

\test{bla}但是,我的第三次尝试显然在扩展中用替换了{blu1blu2}。然后,它被 替换为\switch。但这不是我想要的,我想\switch对两个参数和 进行操作,{blu1}它们{blu2}都应该由 提供\test

第四次尝试似乎产生了完全相同的结果。

答案1

\expandafter\switch\test{bla}

\switch\ifstrequal{blah}{bla}{{blu1}{blu2}}{{error}{schmerror}}

blah \ifstrequal {bla}{{blu1}{blu2}}{{error}{schmerror}}

这不是你想要的。

您可以将调用结构更改为

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{etoolbox}

\newcommand{\test}[2]{%
\ifstrequal{#2}{bla}{#1{blu1}{blu2}}{#1{error}{schmerror}}%
}

\newcommand{\switch}[2]{#2 #1}

\begin{document}

\test{}{bla}

\test\switch{bla} 

\end{document}

相关内容