Latx3 isme göre işlev kullanın
Benzer şekilde tanımlanmış birkaç fonksiyonum var ve daha sonra base + argüman adıyla kullanılacaklar .
Bulamıyorum \cs_use:cama \use:cve var \cs_if_exist_use:c. Böyle bir şeyi yapmanın doğru yolu bu \str_case:nnmu yoksa başka bir şey mi kullanmalıyım ?
\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}
Yanıtlar
Oluşturulan işlev olmadığında ne yapmak istediğinize bağlıdır.
İşlev \cs_if_exist_use:ctemelde \use:cşununla aynıdır : etrafı sararlar \csname...\endcsname. İlki, ancak ikincisinin olmadığını kontrol eder.
O halde sebebi nedir \cs_if_exist_use:c? Serinin bir parçası
\cs_if_exist_use:c \cs_if_exist_use:cT \cs_if_exist_use:cF \cs_if_exist_use:cTF
Yaparsan
\test{a}{abc}
\test{b}{abc}
\test{c}{abc}
sen alırsın
* abc * + abc + abc
ama muhtemelen üçüncü durum hakkında uyarılmak veya belki hiçbir şey çıktılamak istemezsiniz. İle
\NewDocumentCommand { \test } { m m }
{
\cs_if_exist_use:cF { my_test_#1:n } { \use_none:n } { #2 }
}
çıktı olurdu
* abc * + abc +
çünkü \my_test_c:nmevcut olmadığından \use_none:n, TeX'e aşağıdaki nargümanı yutan giriş akışını koyması talimatı verilir . Önüne uygun bir uyarı veya hata mesajı ekleyebilirsiniz \use_none:n.
\use:cExpl3 çok erken güne aittir ve (eğer adı geçerli olduğunu biliyoruz durumlarda herhangi çeki olmayan) bu görev için tam olarak bu. Muhtemelen ad \cs_use:cbir takma ad olarak verilmiş olabilir, ancak simge listesi değişkenleri için eşit derecede kullanılabilir ve bu nedenle \use_...ad ailesine konulmuştur .