有人可以透過範例解釋xparse
-expl3
命令是如何運作的嗎? 和在這裡重要\str_case:nnF
嗎?str
case
請避免長(文)答案。我想如果你解釋了基礎知識,我就可以在任何我想要的地方使用它。
答案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
isexpl3
的 string 模組,因此您知道它對\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
,您可以在其中找到每個命令的作用的描述。