\afterlocationment 구문을 사용하는 매크로?

\afterlocationment 구문을 사용하는 매크로?

어떤 이유로 입력 스트림 동작을 흉내내는 매크로를 만들고 싶다고 가정해 \afterassignment보겠습니다 \aftergroup. 즉, 흡수하고 싶다.정확히 하나매크로를 따르는 입력 스트림의 토큰을 확장하지 않고 일치하지 않는 중괄호인지 여부에 관계없이 내가 볼 수 있는 곳에 저장합니다. 이것은 거의 비슷 \[future]let하지만 꼭 같지는 않습니다.

\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

"Right Wrong"이 출력됩니다.

답변1

\save다음은 명시적 중괄호와 암시적 중괄호를 구별하는 것을 제외한 모든 작업을 수행하는 정의입니다 . (내 생각에는 \afterassignment. \global그것이 작동하는 방식이기 때문에 사용 \afterassignment하지만 필수적인 것은 아닙니다.

\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}}

관련 정보