
LaTeX3에서 매개변수를 사용하지 않는 개인 명령과 로컬 토큰 목록 변수 사이의 실용적이고 철학적인 차이점은 무엇입니까? 어떤 상황에서 하나를 다른 것보다 선호해야 합니까? 허용되는 모범 사례가 있습니까?
예를 들어, 와 같은 글꼴 스위치를 유지하는 키를 정의한다고 가정해 보겠습니다 \color{red}\itshape
. 개인 명령을 사용하여 글꼴 스위치를 저장하면 다음을 정의할 수 있습니다.
\cs_new:Npn \@@_font: { }
\keys_define:nn { @@ } {
font .code:n = { \cs_set:Npn \@@_font: {#1} } ,
font .value_required:n = true ,
font .initial:n = ,
}
반면에 로컬 토큰 목록 변수를 사용하면 다음을 정의할 수 있습니다.
\tl_new:N \l_@@_font_tl
\keys_define:nn { @@ } {
font .tl_set:N = \l_@@_font_tl ,
font .value_required:n = true ,
font .initial:n = ,
}
LaTeX3에서는 이 두 버전 중 어느 버전이 선호됩니까?
답변1
이것은 경계선에 있는 경우입니다. 함수와 변수의 차이점은 다음과 같습니다.
- 함수는 작업을 수행합니다.
- 가변 저장 값
현재 글꼴을 변경하는 것은 동작이므로 이 경우에는 기능을 더 선호합니다.
진행하는 가장 깨끗한 방법은 다음과 같습니다.
\cs_new_protected:Nn \@@_use_font:n { #1 }
\cs_generate_variant:Nn \@@_use_font:n { V }
\keys_define:nn { @@ }
{
font .tl_set:N = \l_@@_font_tl ,
font .value_required:n = true ,
font .initial:n = ,
}
~와 함께
\@@_use_font:V \l_@@_font_tl
사용 시점에.
반면에 기존 expl3
코드에서는 효율성을 위해 토큰 목록 변수를 직접 사용하는 것이 일반적입니다. 따라서 이와 같은 경우에는 지침을 엄격하게 준수하는 것보다 개인적인 선호도가 더 높습니다. 이 경우 도입된 오버헤드는 \@@_use_font:V
무시할 수 있으며, 다른 유사한 경우에는 효율성이 변수 사용 선택을 더 매력적으로 만들 수 있습니다.