So verwenden Sie den expl3-Befehl \str_case:nnF

So verwenden Sie den expl3-Befehl \str_case:nnF

Kann mir bitte jemand anhand eines Beispiels erklären, wie der -Befehl xparsefunktioniert ? Sind und hier wichtig?expl3\str_case:nnFstrcase

Bitte vermeiden Sie lange (Text-)Antworten. Ich denke, wenn Sie die Grundlagen erklären, kann ich es verwenden, wo immer ich will.

Antwort1

So kurz wie möglich:

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

Der Befehl vergleicht der Reihe nach <string>alle Zeichenfolgen und führt die entsprechende Funktion aus, wenn eine Übereinstimmung gefunden wird. Wenn keine Übereinstimmungen gefunden werden, wird die Funktion ausgeführt.<case n><code n><false code>


Beispiel: Angenommen, Sie haben ein Makro, dem der Benutzer einige Optionen übergibt, z. B. , above, centeroder below, und das je nach gewählter Option Code ausführt und einen Fehler ausgibt, wenn etwas Unsinniges eingegeben wird:

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

würde dann \cfg_test:n {center}ausgeführt <'center' code>und würde einen Fehler auslösen ( könnte jedoch stattdessen verwendet werden \cfg_test: {wrong}, wenn dies für eine Benutzeroberfläche wäre ).l3keys


Einexpl3 Befehl(Variablen sind unterschiedlich) haben einen Namen der Form:

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

Hier <module>wird angegeben, woher der Befehl stammt: strEs handelt sich um expl3das Zeichenfolgenmodul von , sodass Sie wissen, dass \str_case:nnFmit Zeichenfolgen gearbeitet wird.

Das <name>gibt an, was der Befehl macht: wird für Funktionen caseverwendet , die sich wie die Konstrukte in anderen Programmiersprachen verhalten. 's Funktionenexpl3switch caseexpl3\<whatever>_case:nn(TF)stetshaben die gleiche allgemeine Syntax wie oben: Es ändert sich nur, welche Art von Vergleich durchgeführt wird. \int_case:nnFmacht beispielsweise dasselbe, vergleicht aber ganze Zahlen.

Das <signature>sagt Ihnen, wie viele und welche Art von Argumenten der Befehl annimmt. nist ein normales {...}-getrenntes Argument und Fist dasselbe wie n, wird aber ausgeführt, wenn der Befehl als false(jetzt raten Sie mal, was das Tbedeutet) ausgewertet wird. Sehen Sie sich das anexpl3.pdf: Sie finden eine Beschreibung aller möglichen Signaturen und des Kernels <modules>. Dann werfen Sie einen Blick aufinterface3.pdf, wo Sie eine Beschreibung der Funktion jedes Befehls finden expl3.

verwandte Informationen