
세 개의 토큰에 대해 작동하는 함수가 있다고 가정해 보겠습니다.
\cs_new:Nn \@@_on_three:NNN { #1, #2, #3 }
그리고 값이 세 개의 토큰인 변수가 있습니다.
\tl_set:Nn \l@@_three_tl { foo }
그리고 당신은 변형을 원합니다
\@@_on_three:V
당신이 말할 수 있도록
\@@_on_three:V \l@@_three_tl
그러나 내가 착각한 것이 아니라면 direct는 인수의 개수( vs. 또는 ) \cs_generate_variant
가 다르기 때문에 혼동될 수 있으며 어떤 경우에도 확장된 인수를 전달합니다.NNN
V
x
중괄호 안에, 오른쪽?
따라서 필요한 것은 다음과 같이 정의된 일종의 '가짜' 변형입니다.
\cs_new:Nn \@@_on_three:V
{ \exp_last_unbraced:Nx \@@_on_three:NNN #1 }
확실하게:이게 효과가 있어. 내 질문은 오히려 덜 '장난'스러운, 즉 덜 중간 수준의 속임수를 사용하는 또 다른 방법이 있는지 여부입니다 expl3
.
답변1
정의
\cs_new:Nn \@@_on_three:V
{ \exp_last_unbraced:Nx \@@_on_three:NNN #1 }
'잘못된' 프로그래밍 지침에 따른 것입니다 expl3
. -type V
변형은 -type 기본 함수와 관련되어야 하며 n
프로세스 중인 변수의 내용에 대해 가정을 해서는 안 됩니다. 예를 들어, 어떤 일이 발생합니까?
\tl_set:Nn \l_@@_three_tl { A }
주어진 정의로 \@@_on_three:V
? 또한 x
-type 확장이 아닌 V
-type 확장을 수행합니다. 예를 들어 전달된 변수가 TeX 레지스터이거나 LaTeX2e '보호된' 코드와 같은 항목이 포함된 경우에는 실패합니다.
명확하게 말하면 \cs_generate_variant:Nn
변형을 생성하는 데 반드시 사용해야 하는 것은 아니지만 변형이 그랬던 것처럼 동일한 방식으로 동작하는 것이 '필수'입니다. 예를 들어 수동으로 조정된 다양한 변형이 있지만 l3tl
이는 성능을 향상시키기 위한 것일 뿐 동작을 변경하지는 않습니다. x
이와 관련하여 올바른 결과를 보여주지 못했기 때문에 최근에 많은 -type 변형을 강화했다는 사실도 참조하세요 .
질문은 말하지 않지만 tl
여기에는 항상 세 개의 토큰으로 구성되는 구조화된 데이터를 저장하는 데 사용되는 것처럼 읽혀집니다. 따라서 원하는 것은 다음과 같습니다.
\cs_new:Nn \@@_on_three:N
{ \exp_last_unbraced:No \@@_on_three:NNN #1 }
의미 체계는 정확히 3개의 토큰을 포함하는 \@@_on_three:N
데 사용해야 합니다 tl
. 이는 낮은 수준의 작업에서 일반적이며 유사한 코드가 예를 들어 실험 출력 루틴( xor
)(수정 예정)의 일부에 사용됩니다.