siunitx:为什么 \num{} 中有一个带有空参数的值?

siunitx:为什么 \num{} 中有一个带有空参数的值?

我偶然发现了以下内容

问题:

如果我使用包\num的命令siunitx并将参数留空\num{},我会在 pdf 输出中得到一个值,它似乎对应于选项的值table-format

例子:

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[round-mode=places, round-integer-to-decimal, round-precision=2,
    table-format = 1.4, 
    table-number-alignment=center,
    round-integer-to-decimal,
    output-decimal-marker={,},
    abbreviations=false
    ]{siunitx}
\begin{document}

empty num: \num{}
or $\num[round-mode=figures, round-precision=4]{}$


$\num[round-mode=figures, round-precision=4]{1.5}$
\end{document}

导致pdflatex

pdflatex 结果

这是一个错误吗?

在手册中我只看到命令的参数 _number_\num是强制的,但是如果这样使用的话似乎没有错误或警告,并且会导致错误的输出(这可能很容易被忽视,因为虽然没有输入,但有一个格式漂亮的数字)。

  • 我做错了什么吗(除了忘记了强制参数)?
  • 这个错误能以某种方式被 LaTeX 或包“捕获”吗?

寻求务实的解决方案

问题出现在这个宏中\ABeschr{}{}{}{}

\newcommand{\Variable}[1]{{\normalsize{#1}}}
\newcommand{\Einheit}[1]{{\footnotesize #1}}
\newcommand{\ABeschr}[4]{\begin{minipage}{2cm}\Variable{#1}\newline \Einheit{#2} \newline \tiny $\beta_{0}\!=\!\num[round-mode=figures, round-precision=4]{#3}$ \newline $\kappa=\!\pm\num[round-mode=figures, round-precision=3]{#4}$ %\rule{\linewidth}{1pt}
\end{minipage}}
  • 有人能建议如何通过让宏检查参数#3 或#4 是否为空然后不输出来避免此错误吗?

评论:这是目前对我有效的解决方案:https://tex.stackexchange.com/a/234434/4009

答案1

这里的行为在形式上是“未定义的”:你没有提供一个值,所以任何事物可能会发生。我目前不测试空值,只进行一些内部测试,以避免彻底的灾难,例如无限循环。但是,不应该依赖这种方式。

至于值的来源:(table-format当前)由与一般数字解析相同的代码进行解析。


尽管如此,在这种情况下我可能会安排完全不输出。作为小更新的一部分,错误可能会很危险(所以必须等我完成 v3)。

答案2

宏的解决方案

为了防止其他人遇到这个问题,我也想发布我的解决方案以避免我的宏中出现此错误\ABeschr

来源

如何检查宏值是否为空或不会使用纯 TeX 条件创建文本?

代码

\newcommand{\ABeschr}[4]{\begin{minipage}{2cm}
\Variable{#1}\newline
\Einheit{#2}
\tiny 
\if\relax\detokenize{#3}\relax
\else
\newline  $\beta_{0}\!=\!\num[round-mode=figures, round-precision=4]{#3}$ 
\fi
\if\relax\detokenize{#4}\relax
\else
\newline $\kappa=\!\pm\num[round-mode=figures, round-precision=3]{#4}$ %\rule{\linewidth}{1pt}
\fi
\end{minipage}}

相关内容