latex3 이름으로 함수 사용

latex3 이름으로 함수 사용

비슷한 방식으로 정의된 여러 함수가 있으며 나중에 해당 이름으로 사용됩니다.기본 + 인수.

찾지 못했지만 및 \cs_use:c이 있습니다 . 이것이 올바른 방법입니까, 아니면 다른 것을 사용해야합니까 ?\use:c\cs_if_exist_use:c\str_case:nn

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\cs_new_protected:Nn \my_test_a:n
  {
    *#1*
  }
\cs_new_protected:Nn \my_test_b:n
  {
    +#1+
  }
\NewDocumentCommand { \test } { m m }
  {
    \cs_if_exist_use:c { my_test_#1:n } { #2 }
  }
\ExplSyntaxOff

\begin{document}
\test{a}{abc}
\test{b}{abc}
\end{document}

답변1

구성된 함수가 존재하지 않을 때 수행하려는 작업에 따라 다릅니다.

이 기능은 \cs_if_exist_use:c본질적으로 다음과 동일합니다 \use:c: 그들은 주위에 래퍼입니다 \csname...\endcsname. 그러나 전자는 후자가 그렇지 않은지 확인합니다.

그렇다면 그 이유는 무엇입니까 \cs_if_exist_use:c? 시리즈의 일부입니다

\cs_if_exist_use:c \cs_if_exist_use:cT \cs_if_exist_use:cF \cs_if_exist_use:cTF

만약 당신이

\test{a}{abc}
\test{b}{abc}
\test{c}{abc}

당신은 얻는다

*abc* +abc+ abc

하지만 아마도 세 번째 경우에 대해 경고를 받고 싶거나 아무것도 출력하지 않기를 원할 것입니다. 와 함께

\NewDocumentCommand { \test } { m m }
  {
    \cs_if_exist_use:cF { my_test_#1:n } { \use_none:n } { #2 }
  }

출력은

*abc* +abc+

\my_test_c:n존재하지 않기 때문에 TeX는 \use_none:n입력 스트림에 넣으라는 지시를 받고 다음 n인수를 게걸스럽게 먹습니다. 앞에 적절한 경고나 오류 메시지를 추가할 수 있습니다 \use_none:n.

답변2

이것은 \use:cexpl3의 초창기 시절의 것이며 정확하게 이 작업을 위한 것입니다(당신의 이름이 유효한 상황을 확인하지 않고). 아마도 별칭으로 이름이 지정되었을 수도 있지만 토큰 목록 변수에도 마찬가지로 잘 사용할 수 있으므로 이름 계열 \cs_use:c에 포함되었습니다 .\use_...

관련 정보