Kann mir bitte jemand anhand eines Beispiels erklären, wie der -Befehl xparse
funktioniert ? Sind und hier wichtig?expl3
\str_case:nnF
str
case
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
, center
oder 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: str
Es handelt sich um expl3
das Zeichenfolgenmodul von , sodass Sie wissen, dass \str_case:nnF
mit Zeichenfolgen gearbeitet wird.
Das <name>
gibt an, was der Befehl macht: wird für Funktionen case
verwendet , die sich wie die Konstrukte in anderen Programmiersprachen verhalten. 's Funktionenexpl3
switch case
expl3
\<whatever>_case:nn(TF)
stetshaben die gleiche allgemeine Syntax wie oben: Es ändert sich nur, welche Art von Vergleich durchgeführt wird. \int_case:nnF
macht beispielsweise dasselbe, vergleicht aber ganze Zahlen.
Das <signature>
sagt Ihnen, wie viele und welche Art von Argumenten der Befehl annimmt. n
ist ein normales {...}
-getrenntes Argument und F
ist dasselbe wie n
, wird aber ausgeführt, wenn der Befehl als false
(jetzt raten Sie mal, was das T
bedeutet) 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
.