我想从 CSV 文件生成格式化的表格:
- 每隔一行使用不同的颜色
- 使用 4 位数字精度
现在我似乎无法同时拥有这两者。
这是一个示例代码来说明我的问题:
测试.csv
a,b,c
d,0.4897844135,0.489789797
e,0.4897844135,0.489789797
f,0.4897844135,0.489789797
测试.tex
\documentclass[a4paper,10pt]{article}
\usepackage{pgfplotstable}
\usepackage{colortbl}
\begin{document}
\pgfplotstabletypeset[
dec sep={$,$},
col sep=comma,
columns={a,b,c},
columns/a/.style={string type, column type={|c}},
columns/b/.style={precision=4, column type={|c}},
columns/c/.style={precision=4, column type={|c|}},
every head row/.style={before row=\hline,after row=\hline},
every row/.style={after row=\hline},
every last row/.style={after row=\hline},
postproc cell content/.code={
\ifodd\pgfplotstablerow\relax
\else
% ah - an even row number.
% ah - introduce a cell color:
\pgfkeysalso{@cell content={\cellcolor[gray]{0.9}#1}}%
\fi
}
,]{test.csv}
}
\end{document}
请注意,我还丢失了小数点分隔符设置。
我应该在代码中添加什么才能使其按照我想要的方式运行?
我是否应该使用其他包/语法来实现我期望的结果?我愿意使用任何其他可以实现相同结果的包。
答案1
通过设置,\pgfkeysalso{@cell content={\cellcolor[gray]{0.9}#1}}%
您将覆盖 PGFPlotstable 生成的单元格内容(仅指#1
单元格的原始值,而不是四舍五入的输出)。您只需将命令添加\cellcolor[gray]{0.9}
到单元格内容中,其余部分保持不变。您可以使用键执行此操作
\pgfkeysalso{@cell content/.prefix={\cellcolor[gray]{0.9}}}%
\documentclass[a4paper,10pt]{article}
\usepackage{pgfplotstable}
\usepackage{colortbl}
\begin{document}
\pgfplotstabletypeset[
dec sep={$,$},
col sep=comma,
columns={a,b,c},
columns/a/.style={string type, column type={|c}},
columns/b/.style={precision=4, column type={|c}},
columns/c/.style={precision=4, column type={|c|}},
every head row/.style={before row=\hline,after row=\hline},
every row/.style={after row=\hline},
every last row/.style={after row=\hline},
postproc cell content/.code={
\ifodd\pgfplotstablerow\relax
\else
% ah - an even row number.
% ah - introduce a cell color:
\pgfkeysalso{@cell content/.prefix={\cellcolor[gray]{0.9}}}%
\fi
}
,]{
a,b,c
d,0.4897844135,0.489789797
e,0.4897844135,0.489789797
f,0.4897844135,0.489789797
}
\end{document}
答案2
杰克的回答是正确的,但我最终做了一些略有不同的事情并认为我会分享:
\documentclass[a4paper,10pt]{article}
\usepackage{pgfplotstable}
\usepackage{colortbl}
\usepackage{xcolor}
\begin{document}
text
\begin{table}[!h]
\center
\pgfplotstabletypeset[
dec sep={$,$},
col sep=comma,
columns={a,b,c},
columns/a/.style={string type, column type={c}},
columns/b/.style={precision=5, column type={c}},
columns/c/.style={precision=5, column type={c}},
every even row/.style={before row={\rowcolor{blue!10}}},
every odd row/.style={before row={\rowcolor{blue!3}}},
,]{
a,b,c
d,0.4897844135,0.489789797
e,0.4897844135,0.489789797
f,0.4897844135,0.489789797
}
\caption{Blah blah blah}
\end{table}
text
\end{document}
正如您所看到的,这样的语法更容易理解。