如何在 l3 中使用选择键?

如何在 l3 中使用选择键?

我想为常量创建一些快捷方式,并希望使用这些快捷方式

  • 计算(无单位),例如使用 \fpeval
  • 具有一个或两个不同的单位

我尝试了以下代码,但我不明白选择键的用途以及使用 \fpeval 进行计算的值的用途。

感谢帮助。

\documentclass{article}
\usepackage{xfp}
\usepackage{siunitx}

\ExplSyntaxOn
\NewDocumentCommand { \numSc } { O{3} m } {
 \num[scientific-notation=true,round-mode=figures,round-precision=#1] { \fp_eval:n { #2 } } 
 }

\keys_define:nn { thomas/elC }
 {
  dez .int_set:N = \l__thomas_test_dez_int,
  dez .initial:n = 4,
  unit .choice:,
  unit / choice-As .code:n = { \ampere\second },
  unit / choice-C .code:n = { \coulomb },
%  unit .initial:n = As,
 }

\NewDocumentCommand { \elC } { s O{} } { 
  \group_begin:
   \keys_set:nn { thomas/elC } { #2 }
   \IfBooleanTF {#1}
    { 
    \SI [scientific-notation=true,round-mode=figures,round-precision=\l__thomas_test_dez_tl] 
    { 1.6021766209e-19 } { \tl_use:N \l_keys_choice_int } 
    }
    { \num [scientific-notation=true,round-mode=figures,round-precision=\l__thomas_test_dez_int] { 1.6021766209e-19 } }
  \group_end:
}
\ExplSyntaxOff

\def\elCh{1.6021766209e-19}

\begin{document}

\numSc[6]{ 3*\elCh }

\elC*[dez=5]

\end{document}

答案1

以下通过引入保存单位的变量来实现。如果您设置一个键,则不能使用直接值,而必须使用某种中间形式。

值

一些进一步的改进:

  • 你不需要xfpsiunitx就足够了。
  • 您应该将整数命名为整数,而不是像标记列表(_int而不是_tl)。
  • 如果设置了初始值,则必须将其定义为选择。

代码:

\documentclass{article}
\usepackage{siunitx}

\ExplSyntaxOn
\NewDocumentCommand { \numSc } { O{3} m } {
 \num[scientific-notation=true,round-mode=figures,round-precision=#1] { \fp_eval:n { #2 } } 
 }

\tl_new:N \l__thomas_unit_tl
\keys_define:nn { thomas/elC }
 {
  dez .int_set:N = \l__thomas_dez_int,
  dez .initial:n = 4,
  unit .choice:,
  unit / choice-As .code:n = { \tl_set:Nn \l__thomas_unit_tl { \ampere\second } },
  unit / choice-C .code:n = { \tl_set:Nn \l__thomas_unit_tl { \coulomb } },
  unit .initial:n = choice-As,
 }

\NewDocumentCommand { \elC } { s O{} } { 
  \group_begin:
   \keys_set:nn { thomas/elC } { #2 }
   \IfBooleanTF {#1}
    { 
    \SI [scientific-notation=true,round-mode=figures,round-precision=\l__thomas_dez_int] 
    { 1.6021766209e-19 } { \tl_use:N \l__thomas_unit_tl } 
    }
    { \num [scientific-notation=true,round-mode=figures,round-precision=\l__thomas_dez_int] { 1.6021766209e-19 } }
  \group_end:
}
\ExplSyntaxOff

\def\elCh{1.6021766209e-19}

\begin{document}

\numSc[6]{ 3*\elCh }

\elC*[dez=5]

\end{document}

相关内容