我对扩展的工作原理不太理解。我读过几篇文章,但没有一篇能解决我的问题。
我一直在尝试做这样的事情:
\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}
这将打印
真的