我有表 1。一列中连续单元格中的重复值应替换为\textquotedbl
表 2 中所示的值。\textquotedbl
尽管数字是右对齐的,但也应根据列宽居中对齐。
以下是 MWE:
\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{pgfplotstable}
\pgfplotsset{width=10cm,compat=1.6}
\usepackage{filecontents}
\usepackage[T1]{fontenc}
\begin{filecontents}{testdataExisting.dat}
id val
1 5634
2 78945
3 78945
4 689623
5 14514
6 14514
7 14514
\end{filecontents}
\begin{filecontents}{testdataGenerated.dat}
id val
1 5634
2 78945
3 \textquotedbl
4 689623
5 14514
6 \textquotedbl
7 \textquotedbl
\end{filecontents}
\begin{document}
Table 1
\pgfplotstabletypeset[col sep=space,columns={id,val},
columns/val/.style={fixed,precision=0,column type=r},
]{testdataExisting.dat}
Table 2
\pgfplotstabletypeset[col sep=space,columns={id,val},
% columns/val/.style={fixed,precision=0,column type=r},
columns/val/.style={string type,column type=r},
]{testdataGenerated.dat}
\end{document}
输出:
在解决方案中,testdataGenerated.dat
不应该存在。我需要一个解决方案来对表进行后处理,testdataExisting.dat
以便用替换重复值\textquotedbl
并对齐这些\textquotedbl
值。
答案1
您可以动态创建一个新列,并用引号替换重复的值,如下所示:
\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{pgfplotstable}
\pgfplotsset{width=10cm,compat=1.6}
\usepackage{filecontents}
\usepackage[T1]{fontenc}
\begin{filecontents}{testdataExisting.dat}
id val
1 5634
2 78945
3 78945
4 689623
5 14514
6 14514
7 14514
\end{filecontents}
\pgfplotstableread{testdataExisting.dat}\origtable
\begin{document}
\begin{minipage}{0.4\linewidth}
Table 1
\medskip
\pgfplotstabletypeset[col sep=space,columns={id,val},
columns/val/.style={fixed,precision=0,column type=r}, ]\origtable
\end{minipage}
\qquad
\begin{minipage}{0.4\linewidth}
Table 2
\medskip
\pgfplotstableset{create on use/newval/.style={create
col/assign/.code={
\getthisrow{val}\curval\getprevrow{val}\pval\ifx\curval\pval\def\curval{\textquotedbl}\fi
\pgfkeyslet{/pgfplots/table/create col/next content}\curval}}}
\pgfplotstabletypeset[col sep=space,columns={id,newval},
columns/newval/.style={string type,column type=r,column name={Value}}, ]\origtable
\end{minipage}
\end{document}
原始数据存储在 中\origtable
。我们在第一个实例中基本按原样打印它。在第二个实例中,我们提供create on use
代码,该代码获取 中的当前值\curval
和 中的先前值\pval
,对它们进行比较,并将所需的输出传递给next content
。
指定新字符串列中数字格式的一种方法是在\else
与上一行进行比较的子句中定义条目时格式化这些数字:
\pgfplotstableset{create on use/newval/.style={create
col/assign/.code={
\getthisrow{val}\curval\getprevrow{val}\pval
\ifx\curval\pval\def\curval{\textquotedbl}\else
\pgfkeys{/pgf/number format/.cd,fixed,precision=0}%
\pgfmathprintnumberto{\curval}\curval\fi
\pgfkeyslet{/pgfplots/table/create col/next content}\curval}}}
\pgfplotstabletypeset[col sep=space,columns={id,newval},
columns/newval/.style={string type,column type=r,column name={Value}}, ]\origtable