如何使用 expl3 指令 \str_case:nnF

如何使用 expl3 指令 \str_case:nnF

有人可以透過範例解釋xparse-expl3命令是如何運作的嗎? 和在這裡重要\str_case:nnF嗎?strcase

請避免長(文)答案。我想如果你解釋了基礎知識,我就可以在任何我想要的地方使用它。

答案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>


範例:假設您有一個宏,使用者向其中傳遞一些選項,例如 、abovecenterbelow並且它根據所選選項運行一些程式碼,如果輸入無意義的內容,則會引發錯誤:

\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>該指令來自:strisexpl3的 string 模組,因此您知道它對\str_case:nnF字串進行操作。

<name>命令說明了該命令的作用:case用於充當其他程式語言中的構造的 expl3函數。的功能switch caseexpl3\<whatever>_case:nn(TF)總是具有與上面相同的通用語法:它只改變它們執行的比較類型。 \int_case:nnF例如,執行相同的操作,但它比較整數。

告訴<signature>您該指令採用多少個參數以及哪種類型。n是一個普通的{...}- 分隔參數,並且F與 相同n,但如果命令計算結果為false(現在猜猜是什麼T意思),它就會被執行。看一眼expl3.pdf:您將找到所有可能的簽名和核心的描述<modules>。然後看一下interface3.pdfexpl3,您可以在其中找到每個命令的作用的描述。

相關內容