有人能举例解释一下xparse
-expl3
命令是如何\str_case:nnF
工作的吗?str
和case
在这里重要吗?
请避免使用长篇(文字)答案。我认为如果您解释一下基础知识,我就可以随时随地使用它。
答案1
尽可能简短:
\str_case:nnF { <string> }
{
{ <case 1> } { <code 1> }
{ <case 2> } { <code 2> }
...
{ <case n> } { <code n> }
}
{ <false code> }
该命令将按顺序<string>
与每个字符串进行比较,如果找到匹配项,则执行相应的操作。如果没有找到匹配项,则执行。<case n>
<code n>
<false code>
示例:假设您有一个宏,用户向其传递一些选项,例如,,above
或center
,below
并且它根据所选的选项运行一些代码,如果输入了一些无意义的内容,则会引发错误:
\cs_new_protected:Npn \cfg_test:n #1
{
\str_case:nnF {#1}
{
{ above } { <'above' code> }
{ center } { <'center' code> }
{ below } { <'below' code> }
}
{ \msg_error:nn { cfg } { invalid-option } {#1} }
}
然后\cfg_test:n {center}
就会运行<'center' code>
并\cfg_test: {wrong}
引发错误(但如果这是用于用户界面,l3keys
则可以用它来代替)。
一个expl3
命令(变量不同)具有以下形式的名称:
\<module>_<name>:<signature>
说<module>
该命令来自哪里:str
是expl3
的字符串模块,所以您知道它对\str_case:nnF
字符串进行操作。
说明<name>
了命令的作用:case
用于expl3
表示switch case
其他编程语言中构造函数的功能。 expl3
的\<whatever>_case:nn(TF)
函数总是具有与上述相同的一般语法:它仅改变它们执行的比较类型。 \int_case:nnF
例如,执行相同的操作,但它比较整数。
告诉<signature>
您命令需要多少个参数以及参数类型。n
是一个普通的{...}
-delimited 参数,与F
相同n
,但如果命令计算结果为false
(现在猜猜是什么T
意思),则会执行它。看一下expl3.pdf
:您将找到所有可能的签名和内核的描述<modules>
。然后查看interface3.pdf
,您将在其中找到每个命令功能的描述expl3
。