지역 사용 {
... }
현명 그룹을
이 답변 에서 지적했듯이 같은 활성 문자 ~
는 매크로 이름으로 사용할 수 있습니다. 불행히도 ~
기본적으로 유일한 활성 문자이며 다른 문자의 catcode를 변경하는 \catcode`!13
데 많은 비용이 듭니다. 12 바이트가 걸립니다. 새로운 매크로 정의가 코드의 작은 영역에만 필요한 경우 로컬 그룹이 해결책이 될 수 있습니다.
TeX가에 의해 열린 새 로컬 그룹으로 들어가면 {
내부 저장 스택에 새 그룹화 수준이 생성됩니다. 즉, 모든 현재 매크로 및 레지스터가 저장됩니다. 에 명시 적으로 표시되지 않은 경우 수정 사항 \global
은 이제 그룹이 닫힐 때까지만 활성화됩니다 }
. 이것은 ~
그룹 내에서 재정의 될 수 있고, 새로운 정의와 함께 사용되며, 그룹이 완료되면 이전 정의가 자동으로 복원됨을 의미합니다.
예를 들면 다음과 같습니다.
\def~{abc}
~ -- {\def~{123}~} -- ~
이 출력
abc-123-abc
이 그룹화 메커니즘의 흥미로운 부작용은 이전 값이 그룹 내에서 변경 될 때까지 계속 사용할 수 있다는 것입니다. 이를 설명하기 위해 카운터 값을 기준으로 여러 문자를 인쇄하고 고정 길이까지 공백으로 채우고 원래 카운터 값으로 계속 진행한다고 가정하십시오. 이것은 다음에 의해 달성 될 수 있습니다.
\newcount\x
\x=3
Print a char \the\x\ times,
{\x=-\x \advance\x 10 pad with \the\x\ spaces,}
and go on with x=\the\x.
어떤 출력
문자를 3 번 인쇄하고 7 칸으로 채우고 x = 3으로 계속하십시오.
이 그룹화 동작은 \loop ... \repeat
중첩 중첩에 TeX의 표준 매크로를 사용하려는 경우 특히 중요합니다 . 이 매크로는 내부 명령을 정의하고 진행 방법을 결정하는 데 사용합니다. 내부 루프를 중괄호에 넣지 않고 중첩하면 내부 명령이 혼동되어 예기치 않은 동작이 발생합니다.