我想:
· 没有零的整数,例如 -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}