![latex3 이름으로 함수 사용](https://rvso.com/image/420048/latex3%20%EC%9D%B4%EB%A6%84%EC%9C%BC%EB%A1%9C%20%ED%95%A8%EC%88%98%20%EC%82%AC%EC%9A%A9.png)
비슷한 방식으로 정의된 여러 함수가 있으며 나중에 해당 이름으로 사용됩니다.기본 + 인수.
찾지 못했지만 및 \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:c
expl3의 초창기 시절의 것이며 정확하게 이 작업을 위한 것입니다(당신의 이름이 유효한 상황을 확인하지 않고). 아마도 별칭으로 이름이 지정되었을 수도 있지만 토큰 목록 변수에도 마찬가지로 잘 사용할 수 있으므로 이름 계열 \cs_use:c
에 포함되었습니다 .\use_...