在 pgfplotstable 中的重复单元格中使用 \textquotedbl

在 pgfplotstable 中的重复单元格中使用 \textquotedbl

我有表 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

示例输出

相关内容