我需要排版一个带单位的表格,所以我想使用siunitx
它。但是,我不想要科学计数法,而是给定的数字。pgfplots
有用fixed relative
于此目的的选项:
\documentclass{article}
\usepackage{pgfplots,siunitx}
\def\numA{1.23456789e3}
\def\numB{1.23456789e-3}
\begin{document}
\noindent
pgf standard format:\\
\pgfmathprintnumber{\numA}\\
\pgfmathprintnumber{\numB}\\
\pgfkeys{/pgf/number format/.cd,fixed relative,precision=3}
desired format:\\
\pgfmathprintnumber{\numA}\\
\pgfmathprintnumber{\numB}
\end{document}
这是上述代码的输出:
如果可能的话,我希望使用 获得相同的输出siunitx
。我尝试过明确禁用scientific-notation
,但似乎该键仅适用于启用科学计数法,siunitx
否则不是用它:
\num{\numA}\\
\num{\numB}\\
\sisetup{round-mode=figures,round-precision=3,scientific-notation=false}
\num{\numA}\\
\num{\numB}\
输出:
一种可能性是重新定义\SI{}{}
并\num{}
使用\pgfmathprintnumber{}
和禁用siunitx
的数字解析,但我想知道我还能做些什么。
我目前的解决方法是:
\let\oldnum\num
\renewcommand{\num}[1]{\oldnum[parse-numbers=false]{\pgfmathprintnumber{#1}}}
\let\oldSI\SI
\renewcommand{\SI}[3][]{\oldSI[#1,parse-numbers=false]{\pgfmathprintnumber{#2}}{#3}}
但这不允许我将选项传递给\pgfmathprintnumber
。将选项传递给\SI
效果很好,例如\SI[per-mode=fraction]{1e-3}{\meter\per\second}
。
答案1
这在 2.5 版本中是可能的,它可以正确处理固定指数为零的情况
\documentclass{article}
\usepackage{pgfplots,siunitx}
\def\numA{1.23456789e3}
\def\numB{1.23456789e-3}
\begin{document}
\noindent
pgf standard format:\\
\pgfmathprintnumber{\numA}\\
\num{\numA}\\
\pgfmathprintnumber{\numB}\\
\num{\numB}\\
\pgfkeys{/pgf/number format/.cd,fixed relative,precision=3}
\sisetup{scientific-notation = fixed, fixed-exponent = 0, round-mode = figures,
round-precision = 3}
desired format:\\
\pgfmathprintnumber{\numA}\\
\num{\numA}\\
\pgfmathprintnumber{\numB}\\
\num{\numB}\\
\end{document}