tex는 언제 매크로 확장을 합니까?

tex는 언제 매크로 확장을 합니까?

교과서의 일부 장을 읽은 후 tex가 명령줄이나 파일의 입력 줄을 먹고 이를 토큰으로 변환한다는 것을 알았습니다. 이러한 토큰이 위장관으로 들어가면 tex는 이를 상자, 접착제 및 기타 항목으로 변환하여 소화할 준비를 한 다음 일부 목록을 구성합니다.

매크로와 관련하여, 어느 단계의 tex가 매크로 정의를 저장하고, 어느 단계의 tex가 tex 교체를 위한 매크로 확장을 수행합니까?

답변1

그건 쉽습니다! TeX는 그렇지 않은 경우를 제외하고 항상 매크로 확장을 수행합니다.

215페이지의 두 번째 이중 위험한 단락에서 우리는 다음과 같은 내용을 읽었습니다.

다음과 같은 경우에는 확장이 억제됩니다.

  • 오류 복구 중에 토큰이 삭제되는 경우(6장 참조).
  • 조건부 텍스트가 무시되어 토큰을 건너뛰는 경우.
  • TeX가 매크로의 인수를 읽을 때.
  • \letTeX가 , \futurelet, \def, \gdef, \edef, \xdef, \chardef, \mathchardef, \countdef, \dimendef, \skipdef, , 및 \muskipdef에 의해 정의되는 제어 시퀀스를 읽을 때 .\toksdef\read\font
  • \expandafterTeX가 , \noexpand, \string, \meaning, \let, \futurelet, \ifx, \show, \afterassignment, 에 대한 인수 토큰을 읽을 때 \aftergroup.
  • \defTeX가 , \gdef, \edef또는 의 매개변수 텍스트를 흡수하는 경우 \xdef.
  • \defTeX가 a 또는 \gdef또는 의 대체 텍스트를 흡수할 때 \read; 또는 \everypar or 와 같은 토큰 변수의 텍스트 \toks0; 또는 \uppercase또는 \lowercase또는 에 대한 토큰 목록입니다 \write. (토큰 목록은 \write나중에 실제로 파일로 출력될 때 확장될 예정입니다.)
  • \spanTeX가 기본 명령에 대한 토큰 뒤나 이후를 읽을 때를 제외하고 정렬의 프리앰블을 읽을 때 \tabskip.
  • $수학 모드를 시작하는 3 과 같은 토큰 바로 뒤에 카테고리 3의 다른 토큰이 뒤따르는지 확인합니다.
  • 알파벳 상수를 시작하는 `12 토큰 바로 뒤에 있습니다 .

불합리하지 않습니까? 정의를 수행할 때 우리는 아무것도 확장되지 않기를 원하며( \edef및 제외 \xdef) 네 번째, 다섯 번째, 여섯 번째 및 일곱 번째 글머리 기호가 이를 다룹니다. 마찬가지로 토큰 목록을 레지스터나 \write.

\expandafter마찬가지로 , \noexpand, \afterassignment또는 이후의 토큰은 \aftergroup명백한 이유로 확장되어서는 안 됩니다. 나중에 TeX이 적절한 시간에 다시 검사할 때 그렇게 될 것입니다.

마지막 항목에는 기술적인 이유가 있습니다. 0, 5, 9, 13, 14 또는 15가 있는 문자에 해당하는 알파벳 상수를 참조하려는 경우 \catcode앞에 백슬래시를 사용하여 "이스케이프"할 수 있지만 이것은 실제로 제어 시퀀스를 형성하지 않습니다. 따라서 `\^^M상수 13을 참조하고 싶다면 do 를 하거나 을 수행하면 됩니다 \chardef\%=`\%.

두 번째 글머리 기호는 중요한 설명으로 보완될 수 있습니다: 조건부 텍스트를 건너뛸 때 TeX는 확장을 하지 않음에도 불구하고,하다\else조건문을 또는 과 일치시키기 위해 토큰을 검사하십시오 \fi. \let기본 조건부 인 모든 토큰은 이와 관련하여 계산됩니다 \else.\fi

답변2

본문에서간단히 말해서 TeX명령과 해당 매개변수는 파란색으로 표시되지만 매개변수가 확장되지 않은 경우에는 빨간색으로 표시됩니다. 여기에 파란색으로 쓰여진 파라메타는 확장 후 읽혀지는 파라메타입니다. TeX 기본 구조의 요약이 시작되는 9페이지의 이 텍스트를 참조하세요.

관련 정보