避免使用带有 longtable 的 pgfplotstable 在表格列表中多次输入标题

避免使用带有 longtable 的 pgfplotstable 在表格列表中多次输入标题

我正在使用 pgfplotstable 显示 .csv 文件中的数据,并且显示的表格会分三页。问题是,每页都会在表格列表中放置一个条目。这是我目前使用 pgfplotstable 的方式:

\documentclass{article}


% MWE from http://tex.stackexchange.com/questions/40411/import-files-with-pgfplotstable-and-split-tables-across-multiple-pages
\usepackage{pgfplotstable}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{array}
\usepackage{filecontents}

\usepackage{pgfplotstable} 
\usepackage{booktabs} 
\usepackage{filecontents}
\usepackage{longtable}

\begin{document}
\listoftables
\begin{filecontents}{testdata.dat}
Idx  Nam Dim Grd
1   Ady 53  F
2   Bar 72  C
3   Cor 83  B
4   Dar 58  D
5   Esa 68  C
6   Foo 67  C
7   Gar 74  C
8   Hur 65  D
9   Jaz 85  B
10  Ker 91  A
1   Ady 53  F
2   Bar 72  C
3   Cor 83  B
\end{filecontents}

\pgfplotstableset{
begin table=\begin{longtable},
end table=\end{longtable},
}

\pgfplotstabletypeset[ col sep=space
                     , header=true
                     , every head row/.style={ before row=\caption{ The Caption }\\\toprule
                                             , after row=\midrule\endhead }
                     , every last row/.style={after row=\bottomrule}
                     ] {testdata.dat}

\end{document}

有没有办法让每页的标题和标题保持重复,但表格列表中只放置一个条目?

此致!

答案1

首先:以下帖子只是一种解决方法,并不是可接受的答案。如果有人能发布真正的答案,我会很高兴。

无论如何,经过几个小时尝试@David Carlisle 的提示和 pgfplotstable 手册中的示例后,我现在正在使用它:

\documentclass{report} % Note that I'm using report (chapters are now available)

\usepackage{pgfplotstable}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{array}
\usepackage{filecontents}

\usepackage{pgfplotstable} 
\usepackage{booktabs} 
\usepackage{filecontents}
\usepackage{longtable}

\begin{document}

\listoftables

\begin{filecontents}{testdata.dat}
    Idx  Nam Dim Grd
    1   Ady 53  F
    2   Bar 72  C
    3   Cor 83  B
    4   Dar 58  D
    5   Esa 68  C
    6   Foo 67  C
    7   Gar 74  C
    8   Hur 65  D
    9   Jaz 85  B
    10  Ker 91  A
    1   Ady 53  F
    2   Bar 72  C
    3   Cor 83  B
\end{filecontents}

\pgfplotstableset{
    begin table=\begin{longtable},
    end table=\end{longtable},
}

\chapter{ Stuff with tables }
\newcounter{tablecounter}

\stepcounter{tablecounter}
% Place a line starting with Number of chapter followed by a dot, followed by the
% number of the counter, followed by free space and then followed by the entry.
\addcontentsline{lot}{section}{\protect\numberline{\thechapter.\arabic{tablecounter}} The Caption 1 }
\pgfplotstabletypeset[ col sep=space
                    , header=true
                    , every head row/.style={ before row=\caption*{ The Caption 1 }\\\toprule % Note that I'm using \caption*{} instead of \caption{}
                                            , after row=\midrule\endhead }
                    , every last row/.style={after row=\bottomrule}
                    ] {testdata.dat}

\stepcounter{tablecounter}
\addcontentsline{lot}{section}{\protect\numberline{\thechapter.\arabic{tablecounter}} The Caption 2 }
\pgfplotstabletypeset[ col sep=space
                    , header=true
                    , every head row/.style={ before row=\caption*{ The Caption 2 }\\\toprule
                                            , after row=\midrule\endhead }
                    , every last row/.style={after row=\bottomrule}
                    ] {testdata.dat}

\end{document}

该解决方法可实现以下目的:

  1. 如果表格跨越多页,请在表格上方添加标题并重复
  2. 如果表格跨越多页,则在表格上方添加页眉并重复此操作
  3. 在具有以下形状的表格列表(批次)中仅放置一个条目:。

无关: 帖子帮助我找到了这个解决方法。

答案2

我找到了另一种解决方法。对于longtable,你可以这样写

\caption{The Caption}
Column 1 & Column 2
\endfirsthead
\caption[]{The Continued Caption}
Column 1 & Column 2
\endhead

对于pgfplotstable,您可以复制数据中的标题行,并使用every head row和向第一行和第二行添加两个不同的标题every first row

这是代码。我把表格加长,扩展到 2 页。

\documentclass{article}


% MWE from http://tex.stackexchange.com/questions/40411/import-files-with-pgfplotstable-and-split-tables-across-multiple-pages
\usepackage{pgfplotstable}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{array}
\usepackage{filecontents}

\usepackage{pgfplotstable} 
\usepackage{booktabs} 
\usepackage{filecontents}
\usepackage{longtable}

\begin{document}
\listoftables
\begin{filecontents}{testdata.dat}
Idx  Nam Dim Grd
Idx  Nam Dim Grd %%% Duplicate here
1   Ady 53  F
2   Bar 72  C
3   Cor 83  B
4   Dar 58  D
5   Esa 68  C
6   Foo 67  C
7   Gar 74  C
8   Hur 65  D
9   Jaz 85  B
10  Ker 91  A
1   Ady 53  F
2   Bar 72  C
3   Cor 83  B
1   Ady 53  F
2   Bar 72  C
3   Cor 83  B
4   Dar 58  D
5   Esa 68  C
6   Foo 67  C
7   Gar 74  C
8   Hur 65  D
9   Jaz 85  B
10  Ker 91  A
1   Ady 53  F
2   Bar 72  C
3   Cor 83  B
1   Ady 53  F
2   Bar 72  C
3   Cor 83  B
4   Dar 58  D
5   Esa 68  C
6   Foo 67  C
7   Gar 74  C
8   Hur 65  D
9   Jaz 85  B
10  Ker 91  A
1   Ady 53  F
2   Bar 72  C
3   Cor 83  B
1   Ady 53  F
2   Bar 72  C
3   Cor 83  B
4   Dar 58  D
5   Esa 68  C
6   Foo 67  C
7   Gar 74  C
8   Hur 65  D
9   Jaz 85  B
10  Ker 91  A
1   Ady 53  F
2   Bar 72  C
3   Cor 83  B
\end{filecontents}

\pgfplotstableset{
begin table=\begin{longtable},
end table=\end{longtable},
}

\pgfplotstabletypeset[ col sep=space
                     , string type %%% Add this line
                     , header=true
                     , every head row/.style={ before row=\caption{ The Caption }\\\toprule
                                             , after row=\midrule\endfirsthead } %%% Change to endfirsthead
                     , every first row/.style={ before row=\caption[]{ The Caption ... continued }\\\toprule
                                             , after row=\midrule\endhead } %%% Add this line
                     , every last row/.style={after row=\bottomrule}
                     ] {testdata.dat}

\end{document}

结果如下。 结果

相关内容