当使用以另一个宏为参数(并执行!)的宏调用该命令时,该\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
无法解释这一切。这只是观察到的行为……