我想为常量创建一些快捷方式,并希望使用这些快捷方式
- 计算(无单位),例如使用 \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
以下通过引入保存单位的变量来实现。如果您设置一个键,则不能使用直接值,而必须使用某种中间形式。
一些进一步的改进:
- 你不需要
xfp
,siunitx
就足够了。 - 您应该将整数命名为整数,而不是像标记列表(
_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}