如何使用 expl3 命令 \str_case:nnF

如何使用 expl3 命令 \str_case:nnF

有人能举例解释一下xparse-expl3命令是如何\str_case:nnF工作的吗?strcase在这里重要吗?

请避免使用长篇(文字)答案。我认为如果您解释一下基础知识,我就可以随时随地使用它。

答案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>


示例:假设您有一个宏,用户向其传递一些选项,例如,,abovecenterbelow并且它根据所选的选项运行一些代码,如果输入了一些无意义的内容,则会引发错误:

\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>该命令来自哪里:strexpl3的字符串模块,所以您知道它对\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

相关内容