
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는 \zzz
the에 사용되며 \edef
the 뒤에도 정의되어 있지만 현재 그룹을 끝내는 \edef
the에서 범위를 벗어나므로 마지막 줄에 다시 정의되지 않은 것으로 표시됩니다.}
\meaning