%20und%20%5Cstr_case%3Ann(TF).png)
Während ich lerne expl3
, fällt es mir schwer, \str_case:nn(TF)
und zu verwenden \tl_case:Nn(TF)
. Ich konnte online keine guten Beispiele finden. (Zum Beispiel die inunravel
sind mir zu kompliziert.) Könnten Sie in sich geschlossene, prägnante und nützliche Anwendungsbeispiele \tl_case:Nn(TF)
und \str_case:nn(TF)
Demonstrationsbeispiele liefern? Lassen Sie uns
\tl_case:NnTF
\str_case:nnTF
\str_case_e:nnTF
zuerst. Ich habe sie vonhttp://mirrors.ctan.org/macros/latex/contrib/l3kernel/interface3.pdf. Wenn Sie Beispiele für andere Suffixe wie :cnTF, :Nn usw. angeben möchten, können Sie dies gerne tun.
Antwort1
Dies ist nur eine Demonstration der Anwendung von \str_case:nnTF
, \str_case_e:nn
und \tl_case:nnTF
.
Die Fälle hierfür :cnTF
usw. wurden bereits in den Kommentaren zur Frage erläutert.
Der Unterschied zwischen \str_case_e
und \str_case
ist die Erweiterung der Argumente. Der Unterschied zwischen einem \tl..
und \str..
besteht darin, dass bei einem String die Catcodes der Zeichen alle gleich sind (12), mit Ausnahme der Leerzeichen, die immer noch den Code 10 haben, während in einer Tokenliste die Catcodes erhalten bleiben.
Die \foo:nnTF
Versionen gehen einfach über den bedingten Zweig in den Eingabestrom – es ist möglich, die passenden Klammern {foobar}{...}
für die weitere Verarbeitung oder Einrichtung (oder „Schriftsatz“) zu verwenden oder dies in den TF-Zweig zu verschieben.
Ich persönlich verwende \foo:nn
nur das und kann mich nicht erinnern, was ich \foo:nnTF
bisher brauchte, aber das hängt natürlich vom tatsächlichen Anwendungsfall ab.
\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}