Come utilizzare il comando Expl3 \ str_case: nnF
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
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.