매개변수가 없는 Private 명령과 로컬 토큰 목록 변수의 차이점

매개변수가 없는 Private 명령과 로컬 토큰 목록 변수의 차이점

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무시할 수 있으며, 다른 유사한 경우에는 효율성이 변수 사용 선택을 더 매력적으로 만들 수 있습니다.

관련 정보