在 pgfplotstable 中,如何将“1e-7”显示为“10⁻⁷”而不是“1⋅10⁻⁷”?
答案1
我在尝试将 log-plotlabels 打印为 compact 时遇到了类似的问题$10^9$
。由于 PGF 的\datavisualization
命令调用\pgfmathprintnumber
了 float 参数,因此*.*e*
我只是将其替换为适合我的图的简单版本:
\def\MyPrintNumber#1e#2x{%
\pgfmathparse{#1 == 1 ? "10^{#2}" : "#1\times 10^{#2}"}%
\ensuremath{\pgfmathresult}}
\renewcommand{\pgfmathprintnumber}[1]{\expandafter\MyPrintNumber#1x}
它使用纯 TeX 分离尾数,使用 PGF 的数学函数检查它是否等于 1(也捕获 1.0 等),并应用固定格式。
或者,您可以对其进行修补以使用 siunitx 的\num
宏,该宏有一个选项可以执行您想要的操作,但前提是尾数1
在舍入之前恰好是,即它对 不起作用1.0e9
,但对 起作用1e9
。因此,我使用 PGF 检测尾数是否舍入为 1,然后传递精确的 1:
\sisetup{retain-unity-mantissa=false}
\def\MyPrintNumber#1e#2x{%
\pgfmathparse{#1 == 1 ? "\num{1e#2}" : "\num{#1e#2}"}%
% ^ no # here!
\ensuremath{\pgfmathresult}}
\def\pgfmathprintnumber#1{\MyPrintNumber#1x}
在这两种情况下:
before: \pgfmathprintnumber{1.0e9} = $1 \cdot 10^9$
after: \pgfmathprintnumber{1.0e9} = $10^9$
% and \pgfmathprintnumber{34} gives an error, but I can live with that.
答案2
尽量使我的回答和你的问题一样简短......
转到pgfmathfloat.code.tex
并发现了这一点:
% #1: sign % #2: mantissa % #3: exponent % #4: CODE to display if the mantissa is drawn. % This code will be shown just before the exponent. % Example: #4=\cdot % #5: CODE to display if the mantissa is NOT draw. (unused currently) % Might be used to display '10^1' instead of '1*10^1'. % #6: CODE to display the exponent. \def\pgfmathfloatrounddisplaystyle@shared@impl#1#2e#3\relax#4#5#6{% \pgfkeysgetvalue{/pgf/number format/@sci exponent mark}\pgfmathfloatrounddisplaystyle@e@mark \ifcase#1\relax \pgfmathprintnumber@fixed@style{#2}#1#2e0\relax% \expandafter\pgfmathfloatrounddisplaystyle@shared@impl@\expandafter{\pgfmathresult}{#4#6}% \or\pgfmathprintnumber@fixed@style{#2}#1#2e0\relax% \expandafter\pgfmathfloatrounddisplaystyle@shared@impl@\expandafter{\pgfmathresult}{#4#6}% \or\pgfmathprintnumber@fixed@style{-#2}#1#2e0\relax% \expandafter\pgfmathfloatrounddisplaystyle@shared@impl@\expandafter{\pgfmathresult}{#4#6}% \or \pgfmathfloatrounddisplaystyle@shared@impl@@{\hbox{NaN}}{}% \or \ifpgfmathprintnumber@showpositive \pgfmathfloatrounddisplaystyle@shared@impl@@{+\infty}{}% \else \pgfmathfloatrounddisplaystyle@shared@impl@@{\infty}{}% \fi \or \pgfmathfloatrounddisplaystyle@shared@impl@@{-\infty}{}% \fi }
结论:要么
- 等待更新;或
- 破解这个宏。