이번 실습에서는 가 처리되는 \chapno
순간 확장을 저장하는 방법을 묻는데 , 가 실행되는 순간 확장해야 합니다 . 전체 예는 다음과 같습니다.\write
\the\count0
\shipout
\def\chapno{5}
\newwrite\cont \openout\cont=out.txt
\edef\next{\write\cont{\chapno,\noexpand\the\count0}}\next
\def\chapno{6}
\count0=100
\bye
대답에는 흥미로운 기술이 사용되었습니다.
{\let\the=0\edef\next{\write\cont{<token list>}}\next}
\noexpand
-trick 과 동일하게 사용하고 있습니까 \let
? 그리고 \noexpand
가능성을 보여주기 위해 왜 답변에 사용되지 않습니까?
답변1
이것은 본질적으로 라텍스가 \protected@write
작동하는 방식이기도 합니다.
\long\def \protected@write#1#2#3{%
\begingroup
\let\thepage\relax
#2%
\let\protect\@unexpandable@protect
\edef\reserved@a{\write#1{#3}}%
\reserved@a
\endgroup
\if@nobreak\ifvmode\nobreak\fi\fi
}
일반적으로 이러한 구성에서는 \noexpand
매크로를 작성하는 동안 제어할 수 있는 토큰 앞에 사용할 수 있지만 <token list>
예제에서는 일반적으로 문서의 일부 섹션 제목 인수에서 나오지만 #1
다음까지 모든 레지스터의 확장을 억제하려고 합니다. \shipout
본문은 그 중 하나를 언급할 수 있습니다. 따라서 확장 불가능하게 만들면 (무엇을 사용하든지 또는 기타 확장 불가능 토큰이 \the
무엇인지는 중요하지 않습니다.) 에서는 자체적으로 그대로 유지되지만 에서는 일반적인 확장 가능 정의를 갖습니다 .\let
0
\relax
\edef
\write
연습에는 장 번호가 확장 가능한 매크로인 쉬운 경우가 있습니다. 대부분의 형식에서 챕터는 자동으로 번호가 지정되므로 카운트 레지스터를 사용하고 궁극적으로 모든 확장을 억제하는 것이 너무 많은 \the
경우에 액세스할 수도 있습니다. \the
(참고 LaTeX는 \thepage
최종 출고가 아닌 사용 시점에 다른 카운터가 확장되는 것을 억제합니다.)