Cómo usar el comando expl3 \ str_case: nnF

Sep 18 2020

Podría alguien explicar cómo xparse- expl3comando de \str_case:nnFobras de un ejemplo? Son stry caseimportante aquí?

Evite respuestas largas (texto). Creo que si me explicas los conceptos básicos, puedo usarlo donde quiera.

Respuestas

5 PhelypeOleinik Sep 18 2020 at 18:35

Tan breve como pueda:

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

El comando se comparará <string>con cada <case n>cadena, en orden, y si encuentra una coincidencia, <code n>se ejecutará la correspondiente . Si no se encuentran coincidencias, <false code>se ejecuta.


Ejemplo: supongamos que tiene una macro a la que el usuario pasa algunas opciones, por ejemplo, above, center, o below, y se ejecuta un código en función 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 esto fuera para una interfaz de usuario, l3keyspodría usarse en su lugar).


Un expl3 comando (las variables son diferentes) tienen un nombre de la forma:

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

El <module>dice que en el comando es de: strEs expl3's módulo string, para que sepa que \str_case:nnFfunciona con cuerdas.

El <name>dice lo que el comando: casese utiliza en expl3las funciones que se comportan como las switch caseconstrucciones en otros lenguajes de programación. expl3Las \<whatever>_case:nn(TF)funciones de siempre tienen 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 enteros.

El <signature>le dice cuántos y qué tipo de argumentos toma el comando. nes un {...}argumento delimitado normal , y Fes lo mismo que n, pero se ejecuta si el comando se evalúa como false(ahora adivina qué Tsignifica). Eche un vistazo a expl3.pdf: encontrará una descripción de todas las firmas posibles y el kernel <modules>. Luego eche un vistazo interface3.pdf, donde encontrará una descripción de lo que hace cada expl3comando.