Come utilizzare il comando Expl3 \ str_case: nnF

Sep 18 2020

Qualcuno potrebbe spiegare come xparse- expl3il comando \str_case:nnFfunziona con un esempio? Sono stre caseimportante?

Si prega di evitare risposte lunghe (di testo). Penso che se mi spieghi le basi, posso usarlo dove voglio.

Risposte

5 PhelypeOleinik Sep 18 2020 at 18:35

Il più breve possibile:

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

Il comando si confronterà <string>con ciascuna <case n>stringa, in ordine, e se trova una corrispondenza, <code n>verrà eseguita la corrispondente . Se non vengono trovate corrispondenze, <false code>viene eseguito.


Esempio: si supponga di avere una macro a cui l'utente passa alcune opzioni, per esempio, above, center, o below, e viene eseguito un codice a seconda dell'opzione scelta, e genera un errore se qualcosa senza senso si digita:

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

quindi \cfg_test:n {center}verrebbe eseguito <'center' code>e \cfg_test: {wrong}genererebbe un errore (sebbene se questo fosse per un'interfaccia utente, l3keyspotrebbe essere usato al suo posto).


Un expl3 comando (le variabili sono diverse) hanno un nome nel formato:

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

Il <module>dice da dove proviene quel comando: strè expl3il modulo stringa di, quindi sai che \str_case:nnFopera sulle stringhe.

Il <name>dice cosa fa il comando: caseè usato expl3per funzioni che si comportano come i switch casecostrutti in altri linguaggi di programmazione. expl3Le \<whatever>_case:nn(TF)funzioni di hanno sempre la stessa sintassi generale di cui sopra: cambia solo il tipo di confronto che eseguono. \int_case:nnF, ad esempio, fa lo stesso ma confronta gli interi.

L' <signature>quante, e che tipo di argomenti del comando prende dice. nè un normale {...}argomento -delimited, ed Fè uguale a n, ma viene eseguito se il comando restituisce false(ora indovina cosa Tsignifica). Dai un'occhiata a expl3.pdf: troverai una descrizione di tutte le possibili firme e del kernel <modules>. Quindi dai un'occhiata a interface3.pdf, dove troverai una descrizione di ciò che fa ogni expl3comando.