Как использовать команду expl3 \str_case:nnF

Как использовать команду expl3 \str_case:nnF

Может кто-нибудь объяснить на примере, как работает xparse- expl3command ? Здесь важны and ?\str_case:nnFstrcase

Пожалуйста, избегайте длинных (текстовых) ответов. Я думаю, если вы объясните основы, я смогу использовать это где захочу.

решение1

Как можно короче:

\str_case:nnF { <string> }
  {
    { <case 1> } { <code 1> }
    { <case 2> } { <code 2> }
    ...
    { <case n> } { <code n> }
  }
  { <false code> }

Команда будет сравнивать <string>каждую <case n>строку по порядку, и если найдет совпадение, то выполнится соответствующее <code n>. Если совпадений не найдено, <false code>то выполнится.


Пример: предположим, у вас есть макрос, которому пользователь передает некоторые параметры, скажем, above, centerили below, и он выполняет некоторый код в зависимости от выбранного параметра и выдает ошибку, если введена какая-то бессмысленная информация:

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

затем \cfg_test:n {center}запустится <'center' code>и \cfg_test: {wrong}выдаст ошибку (хотя если бы это было для пользовательского интерфейса, l3keysможно было бы использовать вместо этого).


Анexpl3 команда(переменные разные) имеют имя вида:

\<module>_<name>:<signature>

Там <module>указано, откуда взялась эта команда: strэто expl3строковый модуль, поэтому вы знаете, что он \str_case:nnFработает со строками.

В нем говорится , <name>что делает команда: caseиспользуется expl3для функций, которые ведут себя как switch caseконструкции в других языках программирования. expl3Функции\<whatever>_case:nn(TF)всегдаимеют тот же общий синтаксис, что и выше: меняется только тип выполняемого сравнения. \int_case:nnF, например, делает то же самое, но сравнивает целые числа.

Сообщает <signature>, сколько и какой тип аргументов принимает команда. n— это обычный {...}аргумент с разделителем -, Fтакой же, как n, но он выполняется, если команда вычисляется как false(теперь угадайте, что Tозначает). Взгляните наexpl3.pdf: вы найдете описание всех возможных сигнатур и ядра <modules>. Затем посмотрите наinterface3.pdf, где вы найдете описание того, что expl3делает каждая команда.

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