expl3コマンドの使用方法\ str_case:nnF

Sep 18 2020

誰かがどのようにxparse-expl3コマンドがどのように機能するかを\str_case:nnF例で説明できますか?あるstrとcaseここで重要なの?

長い(テキスト)回答は避けてください。基本を説明していただければ、どこでも使えると思います。

回答

5 PhelypeOleinik Sep 18 2020 at 18:35

私ができる限り短い:

\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コマンドの機能の説明があります。