我对该siunitx
包裹有一个很大的疑问,我希望有人可以帮助我。
首先我想使用包的自动数字转换。所以我定义了:
\sisetup{scientific-notation = engineering}
但是现在每个数字都转换为工程格式。例如:0.01
=>10x10^3
但我希望这个数字不会自动转换。
是否有一个可以调整的选项,可以告诉包应在哪个最大指数数上scientific-notation
进行此转换?
我的论文中确实有很多数字,手动为每个数字打开或关闭科学记数法真的很困难。
答案1
我在文档中没有看到任何可以控制这种行为的内容。
对于存在少数例外的情况,您可以使用 手动关闭您想要的例外\num[scientific-notation=false]{}
。
或者,如果你可以准确定义何时添加指数,则可以\num
根据其值重新定义行为。下面我已定义为\num
适用scientific-notation=false
-\Threshold <= number <= \Threshold
其中\Threshold
是您定义的值。使用\Threshold=0.09
您将得到结果新的下面的列中给出了值數量柱子:
笔记:
- 问题中建议使用最大指数来确定是否使用科学计数法。我不确定这种解决方案是否普遍可行。也许基于位数的解决方案可能有效。一旦确定了更好的算法,就可以
\IfLessThanOrEqual
调整宏以适应。
代码:
下面我已经调整这个解决方案来自如何测试数字是否为负数界定\IfLessThanOrEqual
:
\documentclass{article}
\usepackage{siunitx}
\usepackage{tikz}
\sisetup{scientific-notation = engineering}
\newcommand*{\Threshold}{0.09}%
\newcommand\IfLessThanOrEqual[4]{%
\begingroup%
\pgfmathsetmacro{\var}{abs(#1)-#2}%
\pgfmathparse{ifthenelse(\var<=0,1,0)}%
\ifdim\pgfmathresult pt= 1 pt%
#3%
\else%
#4%
\fi%
\endgroup%
}%
\let\OldNum\num%
\renewcommand*{\num}[2][]{%
\IfLessThanOrEqual{#2}{\Threshold}{%
\OldNum[scientific-notation=false,#1]{#2}%
}{%
\OldNum[#1]{#2}%
}%
}%
\begin{document}
\newcommand{\Row}[1]{#1 & \OldNum{#1} & \num{#1}}%
\begin{tabular}{l l l}
Num & Old & New\\
\Row{0.01}\\
\Row{0.09}\\
\Row{0.091}\\
\end{tabular}
\end{document}
答案2
相关问题仅适用于大数的科学记数法刚刚从 Bruno le Floch 那里得到了一个完美的答案,我想在这里展示它也会有所帮助。
答案使用包expl3
并定义一个新命令来测试要打印的数字是否超过阈值:\fpcmpTF
。
\documentclass{article}
\usepackage{expl3,siunitx}
\sisetup{scientific-notation=true}
\ExplSyntaxOn
\cs_new_eq:NN \fpcmpTF \fp_compare:nTF
\ExplSyntaxOff
\newcommand*{\ThresholdLow}{0.01} % Change to your taste
\newcommand*{\ThresholdHigh}{100}
\let\OldNum\num%
\renewcommand*{\num}[2][]{%
\fpcmpTF{abs(#2)<=\ThresholdLow}{%
\OldNum[scientific-notation=true,#1]{#2}%
}{%
\fpcmpTF{abs(#2)>=\ThresholdHigh}{%
\OldNum[scientific-notation=true,#1]{#2}%
}{%
\OldNum[scientific-notation=false,#1]{#2}%
}%
}%
}%
\begin{document}
\newcommand{\Row}[1]{#1 & \OldNum{#1} & \num{#1}}%
\begin{tabular}{l l l}
Num & Old & New\\
\Row{0.01}\\
\Row{0.1}\\
\Row{1}\\
\Row{10}\\
\Row{100}\\
\end{tabular}
\end{document}
如果你喜欢这个,那么一定要把票投给 Bruno 的答案如何减去非常大的数字和小于一的数字?。