Digamos que por alguna razón quiero crear una macro con un comportamiento de flujo de entrada que imite el de \afterassignment
y \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]let
pero 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 \save
que 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 \global
porque así \afterassignment
funciona, 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}}