¿Alguien podría explicar cómo funciona xparse
el expl3
comando \str_case:nnF
con un ejemplo? str
¿ Son case
importantes aquí?
Evite respuestas largas (texto). Creo que si explicas los conceptos básicos, puedo usarlo donde quiera.
Respuesta1
Lo más breve que puedo:
\str_case:nnF { <string> }
{
{ <case 1> } { <code 1> }
{ <case 2> } { <code 2> }
...
{ <case n> } { <code n> }
}
{ <false code> }
El comando comparará <string>
con cada <case n>
cadena, en orden, y si encuentra una coincidencia, <code n>
se ejecuta la correspondiente. Si no se encuentran coincidencias, <false code>
se ejecuta.
Ejemplo: supongamos que tiene una macro a la que el usuario le pasa algunas opciones, por ejemplo, above
, center
o below
, y ejecuta algún código dependiendo de la opción elegida, y genera un error si se escribe algo sin sentido:
\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} }
}
luego \cfg_test:n {center}
se ejecutaría <'center' code>
y \cfg_test: {wrong}
generaría un error (aunque si fuera para una interfaz de usuario, l3keys
podría usarse en su lugar).
Unexpl3
dominio(las variables son diferentes) tienen un nombre de la forma:
\<module>_<name>:<signature>
Dice <module>
de dónde proviene ese comando: str
es expl3
el módulo de cadena, para que sepa que \str_case:nnF
opera en cadenas.
Dice <name>
lo que hace el comando: case
se usa expl3
para funciones que se comportan como switch case
construcciones en otros lenguajes de programación. funciones expl3
de\<whatever>_case:nn(TF)
siempretienen la misma sintaxis general que la anterior: solo cambia el tipo de comparación que realizan. \int_case:nnF
, por ejemplo, hace lo mismo pero compara números enteros.
Le indica <signature>
cuántos y qué tipo de argumentos toma el comando. n
es un argumento normal {...}
delimitado y F
es igual que n
, pero se ejecuta si el comando se evalúa como false
(ahora adivina qué T
significa). Echa un vistazo aexpl3.pdf
: encontrará una descripción de todas las firmas posibles y del kernel <modules>
. Entonces echa un vistazo ainterface3.pdf
, donde encontrarás una descripción de lo que expl3
hace cada comando.