\documentclass[12pt,a4paper]{article}
\usepackage{siunitx,booktabs}
\usepackage{expl3}
\ExplSyntaxOn
%
\NewDocumentCommand{\calcSId}{o m m}
{\SI[#1]{\fp_to_decimal:n{#2}}{#3}}
\NewDocumentCommand{\calcSIdcfr}{m m m}
{\SI[round-mode = figures, round-precision = #1, round-integer-to-decimal]{\fp_to_decimal:n{#2}}{#3}}
\DeclareDocumentCommand{\myformat}{m m}
{\fp_to_decimal:n{round((#1), #2)}}
%
\fp_set:Nn \mamol {30.07}
\fp_set:Nn \massetano {52.02}
\fp_set:Nn \nmoli {\massetano / \mamol}
%
\ExplSyntaxOff
\begin{document}
\[ n = \calcSId{\nmoli}{\mole} \]
\[ n = \calcSId[round-mode = figures, round-precision = 4, round-integer-to-decimal]{\nmoli}{\mole} \]
\[ n = \calcSId{\myformat{\nmoli}{4}}{\mole} \]
\[ n = \calcSIdcfr{4}{\nmoli}{\mole} \]
\end{document}
我希望只有一个\calcSId
这样的命令,不带可选参数,将打印完整的计算数字。 相同的命令,指定数字的数量,然后应该打印数字,如\calcSIdcfr
。
我不知道如何[round-mode = figures, round-precision = #1, round-integer-to-decimal]
自动“插入”(或其他选项),而无需每次都打印它或使用单独的命令\calcSIdcfr
。
有什么建议吗,或者这是不可能的?
答案1
#1
您可以使用以下方式确定可选参数中某个值的存在情况\IfValueTF{#1}{<true>}{<false>}
:
\documentclass{article}
\usepackage{siunitx}
\ExplSyntaxOn
\NewDocumentCommand{\calcSId}{o m m}
{\IfValueTF{#1}
{\SI[round-mode = figures, round-precision = #1, round-integer-to-decimal]{\fp_to_decimal:n{#2}}{#3}}
{\SI{\fp_to_decimal:n{#2}}{#3}}
}
\NewDocumentCommand{\calcSIdcfr}{m m m}
{\SI[round-mode = figures, round-precision = #1, round-integer-to-decimal]{\fp_to_decimal:n{#2}}{#3}}
\DeclareDocumentCommand{\myformat}{m m}
{\fp_to_decimal:n{round((#1), #2)}}
\fp_set:Nn \mamol {30.07}
\fp_set:Nn \massetano {52.02}
\fp_set:Nn \nmoli {\massetano / \mamol}
\ExplSyntaxOff
\begin{document}
\[ n = \calcSId{\nmoli}{\mole} \]
\[ n = \calcSId[4]{\nmoli}{\mole} \]
\[ n = \calcSId{\myformat{\nmoli}{4}}{\mole} \]
\[ n = \calcSIdcfr{4}{\nmoli}{\mole} \]
\end{document}