我偶然发现了以下内容
问题:
如果我使用包\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
:
这是一个错误吗?
在手册中我只看到命令的参数 _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
:
来源
代码
\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}}