Хорошие примеры \tl_case:Nn(TF) и \str_case:nn(TF)

Хорошие примеры \tl_case:Nn(TF) и \str_case:nn(TF)

Во время обучения expl3у меня возникли трудности с использованием \str_case:nn(TF)и \tl_case:Nn(TF). Мне не удалось найти в сети хорошие примеры. (Например, те, что вunravelслишком сложны для меня.) Не могли бы вы предоставить самодостаточные, краткие, полезные примеры применения \tl_case:Nn(TF)и \str_case:nn(TF)для демонстрационных целей? Давайте разберемся

  1. \tl_case:NnTF
  2. \str_case:nnTF
  3. \str_case_e:nnTF

во-первых. Я получил их отhttp://mirrors.ctan.org/macros/latex/contrib/l3kernel/interface3.pdf. Если вы хотите предоставить примеры для других суффиксов, таких как :cnTF, :Nn и т. д., пожалуйста, не стесняйтесь.

решение1

Это всего лишь демонстрация применения \str_case:nnTF, \str_case_e:nnи \tl_case:nnTF.

Случаи :cnTFи т. д. уже были объяснены в комментариях к вопросу.

Разница между \str_case_eи \str_caseзаключается в расширении аргументов. Разница между \tl..и \str..заключается в том, что для строки все коды символов равны (12), за исключением символов пробела, которые по-прежнему имеют код 10, тогда как в списке токенов коды сохраняются.

Версии \foo:nnTFпросто вводят условный переход во входной поток — можно использовать соответствующие скобки {foobar}{...}для дальнейшей обработки или настройки (или «набора») или перенести его в TF-ветвь.

Я лично пользуюсь \foo:nnтолько им и не могу вспомнить, что мне было нужно \foo:nnTF, но это, конечно, зависит от реального варианта использования.

\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}

Связанный контент