Alguém poderia explicar como xparse
- expl3
o comando \str_case:nnF
funciona com um exemplo? São str
e case
importantes aqui?
Evite respostas longas (texto). Acho que se você explicar o básico, posso usá-lo onde quiser.
Responder1
O mais curto que posso:
\str_case:nnF { <string> }
{
{ <case 1> } { <code 1> }
{ <case 2> } { <code 2> }
...
{ <case n> } { <code n> }
}
{ <false code> }
O comando irá comparar <string>
com cada <case n>
string, em ordem, e se encontrar uma correspondência, a correspondente <code n>
será executada. Se nenhuma correspondência for encontrada, <false code>
será executado.
Exemplo: suponha que você tenha uma macro para a qual o usuário passa algumas opções, digamos, above
, center
, ou below
, e ela executa algum código dependendo da opção escolhida, e gera um erro se algo sem sentido for digitado:
\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} }
}
então \cfg_test:n {center}
seria executado <'center' code>
e \cfg_test: {wrong}
geraria um erro (embora, se fosse para uma interface de usuário, l3keys
pudesse ser usado).
Umexpl3
comando(as variáveis são diferentes) têm um nome no formato:
\<module>_<name>:<signature>
Diz <module>
de onde vem esse comando: str
is expl3
do módulo string, para que você saiba que ele \str_case:nnF
opera em strings.
Diz <name>
o que o comando faz: case
é usado expl3
para funções que se comportam como switch case
construções em outras linguagens de programação. funções expl3
de\<whatever>_case:nn(TF)
sempretêm a mesma sintaxe geral acima: apenas altera o tipo de comparação que eles realizam. \int_case:nnF
, por exemplo, faz o mesmo, mas compara números inteiros.
O <signature>
informa quantos e que tipo de argumentos o comando usa. n
é um {...}
argumento delimitado normal e F
é igual a n
, mas será executado se o comando for avaliado como false
(agora adivinhe o que T
significa). Dê uma olhadaexpl3.pdf
: você encontrará uma descrição de todas as assinaturas possíveis e do kernel <modules>
. Então dê uma olhadainterface3.pdf
, onde você encontrará uma descrição do que cada expl3
comando faz.