将命令分配给 str 不起作用

将命令分配给 str 不起作用

我想将其他命令(如)的值分配\nobreakspace给字符串,以便以后使用它们。

分配似乎不起作用,因为它是按字面意思执行命令......

\documentclass{scrlttr2}

\usepackage{tgheros}
\renewcommand\familydefault{\sfdefault}

\usepackage[ngerman]{babel}

% =====================================
% correct number displaying

\usepackage[mode=text, reset-text-series = false, separate-uncertainty, group-digits=integer, group-minimum-digits = 4]{siunitx}

\sisetup{group-separator = {\,}, input-decimal-markers={,.}, output-decimal-marker = {,}}


\ExplSyntaxOn

\str_new:N \g__eur_length_str

\NewDocumentCommand{\setcurrencyformat}{m}
{
    \str_gset:Nn \g__eur_length_str { #1 }
}

\NewDocumentCommand{\EUR}{om}
{
    \currency_print_value:nnn { #1 } { #2 } { € }
}

\NewDocumentCommand{\currency}{om}
{
    \currency_print_value:nnn { #1 } { #2 } { }
}


\cs_new_protected:Nn \currency_print_value:nnn
{
    \IfNoValueTF{#1}
    {% no optional argument
        \currency_print:Vnn \g__eur_length_str { #2 } { #3 }
    }
    {% optional argument present
        \currency_print:nnn { #1 } { #2 } { #3 }
    }
}

\str_new:N \l__currency_temp_str

\cs_new_protected:Nn \currency_print:nnn
{
    \str_if_eq:nnTF {#3} { }
    { % empty
        \str_set:Nn \l__currency_temp_str {}
    }
    { % not empty
        \str_set:Nn \l__currency_temp_str { \nobreakspace \unit{#3} }
    }
    
    \str_show:N \l__currency_temp_str
    
    \str_case:nn { #1 }
    {
        { full }    { \num[group-separator = {.}, minimum-decimal-digits = 2]{#2} \str_use:N \l__currency_temp_str }
        { standard }{ \num[group-separator = {.}, round-mode = places, round-precision = 2]{#2} \str_use:N \l__currency_temp_str }     
        { min }     { \num[group-separator = {.}, round-mode = places, round-precision = 0]{#2} \str_use:N \l__currency_temp_str }
        { noseperator }  { #2 } %\nobreakspace \unit{#3} }
}
}
\cs_generate_variant:Nn \currency_print:nnn { V }

\setcurrencyformat{full}

\ExplSyntaxOff


% =====================================
% calculation

\RequirePackage{booktabs}


\begin{document}
\begin{letter}{}
    
    \currency[noseparator]{123.45678} (currency[noseparator])
    
    \EUR{456.7890} (EUR)

    
\end{letter}
\end{document}

\str_set:nn \l_temp_str { \nobreakspace \unit{#3} }正确吗?我也尝试过\str_set:nV \l_temp_str { \nobreakspace \unit{#3} }获取命令的值,但也没有用...

答案1

数据str类型与原始数据的结果匹配,例如\string,,\detokenize...除空格(catcode 10)之外,catcode 为 12(其他)的所有字符标记。

因此,您不能存储 csname 令牌,\unit例如str

使用tl(标记列表)数据类型。

相关内容