pgfmath:不带零的整数,带零填充的非整数(和固定)

pgfmath:不带零的整数,带零填充的非整数(和固定)

在此处输入图片描述

我想:
· 没有零的整数,例如 -2 ---> -2(不是 -2.0000)
· 用零填充的非整数,
例如 1.23 ---> 1.2300
例如 1.2345 --> 1.2345

提示:
· pgfmath-解决方案会很好(与 siunitx 等不同)。
· 我需要它pgfplotstable,但我不知道这是否是 pgfplotstable 特有的问题。

我必须设置什么?

\documentclass{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.17}

\begin{document}
\pgfplotstableset{col sep=comma}
\section{Actual}
\pgfplotstabletypeset[
fixed relative,
zerofill,  precision=4,  % no effect
]{
0, 1,  -2,  1.23,  1.2345
}

\section{Target}
\pgfplotstabletypeset[string type]{
0, 1,  -2,  1.2300,  1.2345
}
\end{document}

答案1

/pgfplots/table/@cell content您可以从钩子中设置键/pgfplots/table/assign cell content,以便为每个单元格定义自定义输出标记。的参数assign cell content是从输入表读取的未格式化数据。\pgfmathifisint允许运行取决于所述数据是否代表整数的条件代码。

\documentclass{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.17}

\begin{document}
\pgfplotstableset{col sep=comma}

\pgfplotstabletypeset[
  every column/.style={
    assign cell content/.code={%
      \pgfmathifisint{##1}
        {\def\myOptions{}}%
        {\def\myOptions{fixed, zerofill, precision=4}}%
      \expandafter\pgfmathprintnumberto\expandafter[\myOptions]
        {\pgfretval}{\myFormattedValue}%
      \pgfplotstableset{@cell content/.expand once=\myFormattedValue}%
    },
  }]{
0, 1,  -2,  1.23,  1.2345
}

\end{document}

在此处输入图片描述

该钩子/pgfplots/table/assign cell content在 TeX 组内运行,因此无需手动清理宏\myOptions\myFormattedValue之后的操作也是自动的。

以下是等效的且更短的,但冗余度稍多:

\documentclass{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.17}

\begin{document}
\pgfplotstableset{col sep=comma}

\pgfplotstabletypeset[
  every column/.style={
    assign cell content/.code={%
      \pgfmathifisint{##1}
        {\pgfmathprintnumberto{\pgfretval}{\myFormattedValue}}
        {\pgfmathprintnumberto[fixed, zerofill, precision=4]
           {\pgfretval}{\myFormattedValue}}%
      \pgfplotstableset{@cell content/.expand once=\myFormattedValue}%
    },
  }]{
0, 1,  -2,  1.23,  1.2345
}

\end{document}

也可以把所有的逻辑都放在每个里面@cell content(也许会使用更多的内存?):

\documentclass{article}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.17}

\begin{document}
\pgfplotstableset{col sep=comma}

\pgfplotstabletypeset[
  every column/.style={
    assign cell content/.style={
      @cell content={%
        \pgfmathifisint{##1}
          {\pgfmathprintnumber{\pgfretval}}
          {\pgfmathprintnumber[fixed, zerofill, precision=4]{\pgfretval}}%
      },
    },
  }]{
0, 1,  -2,  1.23,  1.2345
}

\end{document}

相关内容