Después de buscar en diferentes repositorios y páginas de internet al final descubrimos la resolución que te compartiremos a continuación.
Solución:
los if...
Los comandos son en su mayoría primitivos de TeX (con newif
es posible definir otros condicionales).
hay algo como ifstring
pero usa ifnum
; El comando pdfstrcmp
toma dos cadenas como argumento y las compara, devolviendo -1 si la primera precede a la segunda (en el orden lexicográfico basado en códigos ASCII), 0 si las cadenas son iguales y 1 en caso contrario. Las formas habituales de explotarlo son
ifnumpdfstrcmpstring1string2=0
else
fi
o
ifcasepdfstrcmpstring1string2%
or
else
fi
En XeTeX hay strcmp
que hace lo mismo; cargando pdftexcmds uno puede usar [email protected]
con pdftex, xetex y luatex.
En los pseudocódigos anteriores "cadena1" y "cadena2" también pueden haber macros, que se expandirán de manera similar a lo que sucede con edef
y al final (cuando no se pueden realizar más expansiones) los tokens se "destokenizan" para la comparación (por lo que relax
se convierte en un personaje de seis string seguido de un espacio; por ejemplo pdfstrcmprelaxstringrelaxspace
devuelve 0).
los etoolbox
El paquete tiene muchos comandos condicionales que van más allá de las primitivas de TeX. Eche un vistazo al manual que le resultará muy útil.
Una alternativa es expl3
. La capa de lenguaje básico de LaTeX3 proporciona varios condicionales. Para manejar cadenas puedes usar la función str_if_eq:nnTF
. Al lado de este condicional expl3
proporciona también una función de caso para strings
nombrada str_case:nn(TF)
.
str_if_eq:nnTF
tiene la siguiente sintaxis:
str_if_eq:nnTF
str_case:nn(TF)
tiene la siguiente sintaxis:
str_case:nnTF
string case 1 code case 1
string case 2 code case 2
...
string case n code case n
(Cualquiera de los T
o F
las ramas se pueden omitir siempre que la letra del argumento coincidente también lo sea).
el manual completo
Si entiendes que te ha resultado provechoso este artículo, sería de mucha ayuda si lo compartieras con el resto seniors y nos ayudes a extender nuestro contenido.