Gute Beispiele für \tl_case:Nn(TF) und \str_case:nn(TF)

Gute Beispiele für \tl_case:Nn(TF) und \str_case:nn(TF)

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 inunravelsind 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

  1. \tl_case:NnTF
  2. \str_case:nnTF
  3. \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:nnund \tl_case:nnTF.

Die Fälle hierfür :cnTFusw. wurden bereits in den Kommentaren zur Frage erläutert.

Der Unterschied zwischen \str_case_eund \str_caseist 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:nnTFVersionen 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:nnnur das und kann mich nicht erinnern, was ich \foo:nnTFbisher 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}

verwandte Informationen