不要显示十的幂中的前导尾数 1(使用 pgfplotstable)

不要显示十的幂中的前导尾数 1(使用 pgfplotstable)

在 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
}

结论:要么

  • 等待更新;或
  • 破解这个宏。

相关内容