Como usar o comando expl3 \ str_case: nnF

Sep 18 2020

Alguém poderia explicar como xparse- o expl3comando \str_case:nnFfunciona com um exemplo? São stre caseimportante aqui?

Evite respostas longas (de texto). Acho que se você explicar o básico, posso usá-lo onde quiser.

Respostas

5 PhelypeOleinik Sep 18 2020 at 18:35

O mais curto que posso:

\str_case:nnF { <string> }
  {
    { <case 1> } { <code 1> }
    { <case 2> } { <code 2> }
    ...
    { <case n> } { <code n> }
  }
  { <false code> }

O comando irá comparar <string>com cada <case n>string, em ordem, e se encontrar uma correspondência, o correspondente <code n>é executado. Se nenhuma correspondência for encontrada, <false code>é executado.


Exemplo: suponha que você tenha uma macro para que o usuário passa algumas opções, digamos, above, center, ou below, e é executado algum código dependendo da opção escolhida, e gerará um erro se algo absurdo é digitado:

\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} }
  }

então \cfg_test:n {center}seria executado <'center' code>e \cfg_test: {wrong}geraria um erro (embora, se fosse para uma interface de usuário, l3keyspudesse ser usado em seu lugar).


Um expl3 comando (as variáveis ​​são diferentes) tem um nome no formato:

\<module>_<name>:<signature>

O <module>diz de onde vem esse comando: stré expl3o módulo string de, então você sabe que \str_case:nnFopera em strings.

O <name>diz o que o comando faz: caseé usado expl3para funções que se comportam como switch caseconstruções em outras linguagens de programação. expl3As \<whatever>_case:nn(TF)funções de sempre têm a mesma sintaxe geral acima: ela apenas altera o tipo de comparação que realizam. \int_case:nnF, por exemplo, faz o mesmo, mas compara números inteiros.

O <signature>informa quantos e quais tipos de argumentos o comando aceita. né um {...}argumento -delimitado normal , e Fé o mesmo que n, mas é executado se o comando for avaliado como false(agora adivinhe o que Tsignifica). Dê uma olhada em expl3.pdf: você encontrará uma descrição de todas as assinaturas possíveis e do kernel <modules>. Em seguida, dê uma olhada em interface3.pdf, onde você encontrará uma descrição do que cada expl3comando faz.