在抽象包的 \thanks 命令中使用复杂的宏

在抽象包的 \thanks 命令中使用复杂的宏

当使用以另一个宏为参数(并执行!)的宏调用该命令时,该\saythanks命令会阻塞:\thanks

\documentclass[twocolumn,a5paper]{paper}
\usepackage{abstract}

\newcommand\thanksdefiner[1]{}
\newcommand\firstauthorthanks{\thanksdefiner{my thanks}}
\newcommand\extractthanks[1]{%
    \renewcommand\thanksdefiner[1]{##1}%
    #1
}

\title{Title}
\author{First Author \\Institution \thanks{\extractthanks\firstauthorthanks}}

\begin{document}
    \twocolumn[
        \maketitle
        % need full-width title
        \begin{onecolabstract}
            abstract text...
        \end{onecolabstract}
    ]
    \saythanks

    % works here:
    \extractthanks\firstauthorthanks
\end{document}

该序列\extractthanks\firstauthorthanks扩展为my thanks,并且在文档中使用时有效。有没有办法\thanks在此设置中调用并获得正确的结果?对第一作者的“感谢”的定义

\newcommand\firstauthorthanks{\thanksdefiner{my thanks}}

由外部提供,不应更改。

我尝试使用\DeclareExpandableDocumentCommand来声明\extractthanks,但没有成功。需要进行什么样的处理\firstauthorthanks才能将其安全地作为参数传递给\thanks

答案1

避免使用\renewcommand内部\extractthanks解决了这个问题,至少对我来说:

\newcommand\thanksdefiner[1]{#1}%
\newcommand\firstauthorthanks{\thanksdefiner{my thanks}}
\newcommand\extractthanks[1]{%
    #1
}

此外,添加必要量的\protect离子也可以解决问题(在这种情况下不需要改变第一部分):

\author{First Author \\Institution
       \thanks{\protect\extractthanks{\protect\firstauthorthanks}}}

我仍然不太了解,\protected@xdef无法解释这一切。这只是观察到的行为……

相关内容