使用文档范围的 newcommand 设置命令选项

使用文档范围的 newcommand 设置命令选项

我经常使用该siunitx软件包,并且得到了许多具有高小数精度的数字。现在我希望能够将这些数字以全精度复制到文本、公式和表格中的相关位置,并在文档的序言中调整精度。

有没有办法通过预定义选项字符串将选项传递给命令?当字符串不用作命令选项时,我可以轻松地使其工作,但对于命令选项,它不起作用...

我的最小例子:

\documentclass[10pt,a4paper,twosided]{article}
\usepackage{siunitx}
\newcommand{\rndprc}{round-mode=places,round-precision=4}%    command option string
\newcommand{\Tk}{\Theta}%    this works...

\begin{document}        
    \paragraph{testing commands...}
    \num[\rndprc]{12.34567890123}

    This is working: $\Tk$ 

\end{document}

知道如何才能实现这一点吗?最好的情况是,有类似的东西\newcommand{\rndprc}[1]{round-mode=places,round-precision={#1}},这样我就可以输入精度。

答案1

.meta宏不会被 key-val 解析器扩展。您可以定义一个键来一次性设置所需的选项,而不是宏。您还可以为键提供参数和默认值:

\documentclass[10pt,a4paper,twosided]{article}
\usepackage{siunitx}
\ExplSyntaxOn
\keys_define:nn { siunitx }
  {
    rndprc .meta:n =
      {
        round-mode = places,
        round-precision = #1,
      },
    rndprc .default:n = 4,
  }
\ExplSyntaxOff
\newcommand{\Tk}{\Theta}

\begin{document}
\paragraph{testing commands...}
\num[rndprc]{12.34567890123}

\num[rndprc=3]{12.34567890123}

This is working: $\Tk$
\end{document}

答案2

本地更改sisetup

\documentclass[10pt,a4paper,twosided]{article}
\usepackage{siunitx}

\newcommand{\rndprc}[1][4]{%
    \sisetup{round-mode=places,round-precision=#1}%  # command option string
}
\newcommand{\Tk}{\Theta}%  # this works...

\begin{document}        
    \paragraph{testing commands...}
    {\rndprc\num{12.34567890123}}

    {\rndprc[3]\num{12.34567890123}}

    This is working: $\Tk$ 

\end{document}

相关内容