Stephan의 TUGboat 기사에서 \expandafter에 대한 질문

Stephan의 TUGboat 기사에서 \expandafter에 대한 질문

Stephan Bechtolshein의 첫 페이지에서TUGboat 기사\expandafter, 그는 의 실행 규칙을 설명했습니다 \expandafter.

나는 여는 중괄호가 토큰 1 이 아닌 토큰 e 여야 하기 때문에 사례 iii이 여기에 나열되어서는 안 된다고 생각합니다 . 즉, 저자는 가장 바깥쪽의 1단계에 iii를 넣었어야 했습니다. 맞나요? 여기에 이미지 설명을 입력하세요

답변1

불행히도 튜토리얼은 그다지 정확하지 않습니다. 실제로 2.iii번 항목은 완전히 잘못된 것입니다. ⟨token 1 ⟩이 이면 {확장 가능한 문자 토큰이 없기 때문에 확장되지 않습니다.

그러나 항목 2.는 여러 측면에서 일반적으로 잘못된 것입니다. \expandafter, \csname및 뿐만 아니라 다른 기본 요소도 확장 가능합니다 \the. 예를 들어, 모두조건부\else, \fi등 을 포함하여 확장 가능합니다 \or. 을 가능하게 해주는 기능입니다

⟨primitive if⟩⟨condition⟩
  \expandafter\@firstoftwo
\else
  \expandafter\@secondoftwo
\fi
{⟨first⟩}{⟨second⟩}%

이는 Bechtolsheim이 무시한 것처럼 보이는 매우 유용한 코드 조각입니다(내가 기억하는 한 TeX에 관한 그의 4권 책에는 설명조차 되어 있지 않습니다). \number또 다른 기본 요소를 언급하자면 확장 가능합니다 .

훨씬 더 간단합니다: TeX가 토큰을 확장할 때(즉, 로 매크로 정의에서 대체 텍스트를 읽을 때와 같이 확장이 억제되지 않는 한 항상 \def) 그리고 find 를 찾을 \expandafter때 다음 토큰을 뛰어넘어 ⟨token이라고 부르겠습니다.이자형⟩, 다음을 확장하려고 합니다. 토큰이 확장 가능한 경우 해당 확장으로 대체됩니다(인수 조회를 통해 가능). 확장이 \expandafter무효화되고 프로세스가 ⟨token에서 다시 시작됩니다.이자형⟩ 확장(확장 가능한 경우)되거나 실행됩니다.

⟨토큰일 때는 전혀 차이가 없습니다.이자형⟩는 {가능한 모든 다른 토큰과 관련됩니다.

또한 예제 8은 기본 기능, 즉 토큰 레지스터에 할당할 때 (선택 사항) 뒤에 ⟨filler⟩가 올 수 있다는 점을 건너뛰기 때문에 약간 오해의 소지가 있습니다. 이는 TeX가 공간과 토큰을 =무시하고 토큰을 확장한다는 의미입니다. \relax찾을 때까지 {. 이렇게 하면 다음이 가능해집니다.

\tb=\expandafter{\the\ta}

혹시사소한 점. 내 의견은 위의 규칙이 언급되었거나 사례가 예가 아니라 그 자체의 특징으로 취급되어야 한다는 것입니다.

관련 정보