问题扩展论证

问题扩展论证

我对扩展的工作原理不太理解。我读过几篇文章,但没有一篇能解决我的问题。

我一直在尝试做这样的事情:

\documentclass{article}
\usepackage{ifthen}
\usepackage{xstring}
\usepackage{etoolbox}

\begin{document}

\exploregroups \expandarg
\StrFindGroup{{{a}}}{1,1}[\foo]
\ifthenelse{\equal{\foo}{a}}{TRUE}{FALSE}

\end{document}

“当然”,它返回 FALSE。我认为这是因为没有扩展参数 \foo。但是,我尝试过:

\edef\fooE{{\foo}}
\ifstrequal{\fooE}{a}{TRUE}{FALSE}

但还是不起作用。我尝试过使用 \expandafter 等,但还是无法使它们工作。

答案1

根据手册,\StrFindGroup{{{a}}}{1,1}返回{a}。您可以通过将扩展传递\foo给返回无括号参数的单参数宏来删除括号。

您可以\texttt{\meaning\foo}在定义它之后通过添加来测试它,这将打印

macro:->{a}

以下是您可以执行的操作的一个示例。

\documentclass{article}
\usepackage{ifthen}
\usepackage{xstring}
\usepackage{etoolbox}

\newcommand{\iden}[1]{#1}

\begin{document}

\exploregroups \expandarg
\StrFindGroup{{{a}}}{1,1}[\foo]
\edef\foo{\expandafter\iden\foo}
\ifthenelse{\equal{\foo}{a}}{TRUE}{FALSE}

\end{document}

这将打印

真的

相关内容