¿Macro con sintaxis \afterassignment?

¿Macro con sintaxis \afterassignment?

Digamos que por alguna razón quiero crear una macro con un comportamiento de flujo de entrada que imite el de \afterassignmenty \aftergroup. Es decir, quiero absorberexactamente unotoken del flujo de entrada que sigue a la macro, sin expandirlo, independientemente de si sería una llave sin coincidencia, y almacenarlo en algún lugar donde pudiera verlo. Esto es casi como, \[future]letpero no del todo: considere

\def\x{\message{Wrong}}
\afterassignment\x
\def\x{\message{Right}}

\def\save{\let\recall=}
\def\x{\message{Wrong}}
\save\x
\def\x{\message{Right}}
\recall

que genera "Correcto Incorrecto".

Respuesta1

Aquí hay una definición \saveque hace todo excepto distinguir llaves explícitas e implícitas. (Lo cual creo que no es posible y no es necesario de todos modos para personalizar \afterassignment). Resulta que esto es bastante fácil. Lo uso \globalporque así \afterassignmentfunciona, pero no es imprescindible.

\def\save{\futurelet\next\s@ve}
\def\s@ve
 {\ifx\next\bgroup \let\next=\s@veopn
  \else\ifx\next\egroup \let\next=\s@veclo
  \else \let\next=\s@vetok \fi\fi\next}
\def\s@veopn  {\global\def\recall{\iftrue {\else}\fi} \let\next=}
\def\s@veclo  {\global\def\recall{\iffalse{\else}\fi} \let\next=}
\def\s@vetok#1{\global\def\recall{#1}}

información relacionada