%20y%20%5Cstr_case%3Ann(TF).png)
Mientras aprendo expl3
, me cuesta usar \str_case:nn(TF)
y \tl_case:Nn(TF)
. No pude encontrar buenos ejemplos en línea. (Por ejemplo, los deunravel
son demasiado complicados para mí.) ¿Podría proporcionarme ejemplos independientes, concisos y útiles de aplicación \tl_case:Nn(TF)
y \str_case:nn(TF)
con fines de demostración? Abordemos
\tl_case:NnTF
\str_case:nnTF
\str_case_e:nnTF
primero. los obtuve dehttp://mirrors.ctan.org/macros/latex/contrib/l3kernel/interface3.pdf. Si desea proporcionar ejemplos de otros sufijos como :cnTF, :Nn, etc., no dude en hacerlo.
Respuesta1
Esto es sólo una demostración de cómo aplicar \str_case:nnTF
, \str_case_e:nn
y \tl_case:nnTF
.
Los casos para :cnTF
etc. ya se han explicado en los comentarios a la pregunta.
La diferencia entre \str_case_e
y \str_case
es la expansión de los argumentos. La diferencia entre a \tl..
y \str..
es que para una cadena los catcodes de los caracteres son todos iguales (12), excepto los de los caracteres de espacio, que todavía tienen el código de 10, mientras que en una lista de tokens, los catcodes se conservan.
Las \foo:nnTF
versiones simplemente ingresan la rama condicional en el flujo de entrada; es posible usar los corchetes coincidentes {foobar}{...}
para un mayor procesamiento o configuración (o 'composición tipográfica') o cambiar esto a la rama TF.
Yo personalmente uso el \foo:nn
único y no recuerdo que lo necesitaba \foo:nnTF
hasta ahora, pero esto depende del caso de uso real, por supuesto.
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\newcommand{\strcase}[1]{%
\str_case:nn {#1} {
{TeX} {\use:c{#1}\space is\space the\space predecessor\space of\space \LaTeX}
{LaTeX} {\use:c{#1}\space is\space the\space successor\space of\space \TeX}
}
}
\newcommand{\strcasetf}[3]{%
\str_case:nnTF {#1} {
{TeX} {\use:c{#1}\space is\space the\space predecessor\space of\space \LaTeX}
{LaTeX} {\use:c{#1}\space is\space the\space successor\space of\space \TeX}
{Word} {#1\space is\space a\space 'typesetter'}
}{
\space#2
}{
\space#3
}
}
\newcommand{\genericstrcase}[3]{%
\str_case:nn {#3} {
{#1} {It was the first argument}
{#2} {It was the second argument}
{Other} {#1 it was 'other'}
}
}
\newcommand{\strcasextf}[3]{%
\str_case_e:nnTF {#1} {
{TeX} {\use:c{#1}\space is\space the\space predecessor\space of\space \LaTeX}
{LaTeX} {\use:c{#1}\space is\space the\space successor\space of\space \TeX}
{Word} {#1\space is\space a\space 'typesetter'}
}{
\space#2
}{
\space#3
}
}
\tl_new:N \l_tl_one
\tl_new:N \l_tl_two
\newcommand{\tlcase}[3]{%
\tl_set:Nn \l_tl_one {#1}
\tl_set:Nn \l_tl_two {#2}
\tl_set:Nn \l_tmpa_tl {#3}
\tl_case:Nn \l_tmpa_tl {
{\l_tl_one} {Yes,\space it\space was\space #1}
{\l_tl_two} {Yes,\space it\space was\space #2}
}
}
\ExplSyntaxOff
\newcommand{\LaTeXStr}{LaTeX}
\newcommand{\WordPressString}{WordPress}
\newcommand{\WordString}{Word}
\begin{document}
\strcase{TeX}
\strcase{LaTeX}
\strcasetf{LaTeX}{-- the strings match}{-- the strings does not match!}
\strcasetf{Word}{-- the strings match}{-- the strings does not match!}
\strcasetf{WordPress}{-- the strings match}{-- the strings does not match!}
\textbf{Compare}
\strcasetf{\LaTeXStr}{-- the strings match}{-- the strings does not match!}
\strcasextf{\LaTeXStr}{-- the strings match}{-- the strings does not match!}
\tlcase{LaTeX}{TeX}{LaTeX}
\tlcase{LaTeX}{TeX}{\LaTeX} % Does nothing, since \LaTeX is not expanded
\textbf{Comparing command tokens}
\tlcase{\LaTeX}{TeX}{\LaTeX}% Compares again
\tlcase{LaTeX is very nice}{TeX}{LaTeX is very nice}
\tlcase{TeX is nice}{TeX is not outdated}{TeX is very nice} % Does not match
\textbf{Comparing strings}
\genericstrcase{LaTeX}{TeX}{LaTeX}
\genericstrcase{ #LaTeX}{ #TeX}{ #TeX}
\genericstrcase{\LaTeX}{TeX}{\LaTeX}
\end{document}