我想将其他命令(如)的值分配\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
(标记列表)数据类型。