
考慮以下模式:
\NewDocumentCommand{\mycommand}{m}{
\myinternalcommand:n{#1}
}
\cs_new:Nn \myinternalcommand:n{
\tl_if_single:nTF{#1}{TRUE}{FALSE}
}
假設我想做不同的事情,這取決於是否\mycommand
獲得 acontrol sequence
作為輸入:\mycommand{\mycs}
應該做一件事,\mycommand{abcde}
應該做另一件事。我特別想\mycommand{ \mycs }
工作。
我的問題是:如何使用\tl_trim_spaces
修剪控制序列周圍的空間...而不擴展控制序列? (在上面的模式中,:n
參數的形式可以改變)
注意:即使這個應用程式很糟糕(在這種情況下,我想知道為什麼),我仍然對原來的問題感興趣:如何在不擴展內部內容的情況下修剪空格?
答案1
當您建立文件命令時,通常會使用ltcmd
處理器介面:
\ExplSyntaxOn
\NewDocumentCommand \mycommand { > { \TrimSpaces } m }
{
\myinternalcommand:n {#1}
}
如果您想在程式碼層級修剪空格,如中所述,interface3
您可以依靠防止進一步擴展的事實\tl_trim_spaces:n
,例如
\cs_new:Npn \my_pkg_fn:n #1
{
\use:e { \tl_trim_spaces:n {#1} }
}
\my_pkg_fn:n { ~ \foo }
將準確地留\foo
在輸入流中。
從問題來看,你似乎也想做類似的事情
\cs_new:Npn \myinternalcommand:n #1
{
\myinternalcommand_aux:e {#1}
}
\cs_new:Npn \myinternalcommand_aux:n #1
{
\tl_if_single:nTF{#1}{TRUE}{FALSE}
}
\cs_generate_variant:Nn \myinternalcommand_aux:n { e }
雖然這確實讓人覺得你在擔心文件級別輸入空格...