TeX가 명령 내에서 확장 가능한 로컬 정의를 허용하지 않는 이유는 무엇입니까?

TeX가 명령 내에서 확장 가능한 로컬 정의를 허용하지 않는 이유는 무엇입니까?

TeX 프로그래밍의 어려움 중 절반은 확장 가능한 명령과 확장 불가능한 명령의 차이입니다. 후자는 일반적으로 명령 정의 내에서 발생하는 할당의 결과입니다. 왜 Knuth의 TeX나 이후의 TeX 엔진이 \local\def이 문제를 완전히 해결하는 구성(또는 다른 이름)을 추가하지 않는지 궁금합니다 . 그러면 당신은 할 수 있습니다

\def\mycmd{%
    \local\def\tempa{<something>}%
    \local\def\tempb{<something>}%
    \local\def\tempc##1##2{<something>}%
    \tempc{\tempa}{\tempb}%
}

여전히 확장 가능한 명령이 있습니다. (해결 방법을 얻기 위해 같은 구성을 사용할 수 있다는 것을 알고 있지만 \group_begin: ... \tl_set:Nn \l__gaussler_temp_tl { ... } \exp_args:NV \group_end: \l__gaussler_temp_tl확장할 수는 없습니다.) 즉, 최신 프로그래밍 언어의 함수처럼 작동합니다. \local명령 정의 외부에서 사용하면 오류가 발생할 수 있습니다. 이것은 TeX 프로그래밍의 많은 골칫거리를 해결할 것입니다.

왜 이것이 아직 이루어지지 않았습니까?

답변1

luatex는 당신이 (아마도) 요구하는 것을 가지고 있습니다

\documentclass{article}

\begin{document}

{
\edef\zz{ ab \immediateassignment\def\zzz{this} cd \zzz}

zz: [\zz]

zzz: [\zzz]

\meaning\zzz
}

\meaning\zzz


\end{document}

따라서 \immediateassignment\def\zzz동일한 \zzz.\edef\edef​로컬 할당이지만 현재 그룹이 아닌 현재 그룹에 로컬입니다 \edef. 그것이 당신이 의미하는 바인지는 확실하지 않습니다.

so는 \zzzthe에 사용되며 \edefthe 뒤에도 정의되어 있지만 현재 그룹을 끝내는 \edefthe에서 범위를 벗어나므로 마지막 줄에 다시 정의되지 않은 것으로 표시됩니다.}\meaning

여기에 이미지 설명을 입력하세요

관련 정보