longtable(或等效项)和 pgfplotstabletypeset 的使用

longtable(或等效项)和 pgfplotstabletypeset 的使用

我是 TikZ 的新用户pgfplots,并且pgfplotstable一直很兴奋地发现在 Matlab(通过matlab2tikz并写入 CSV)和 LaTeX 之间切换是多么容易。我现在变得更有野心了,我的问题是,如何正确地实现浮动内的多页longtablepgfplotstableset用于放置、标题等)?到目前为止,我已经能够通过将这些长列表拆分为较短的子表来避免这种复杂情况。我还尝试了几种解决方法来尝试实现所需的功能,包括end table按照pgfplots手册中的建议向别名添加标题或使用capt-of包在浮动之外添加标题。这种方法效果不错,但没有“longtable”的良好“表格?继续”行为。有没有更好的方法来做到这一点?

这是一个典型的宏,输入参数#1是 CSV 文件名和#2ToC/LoF 的标题:

\newrobustcmd{\strtable}[2]{
\pgfplotstableset{
begin table=\begin{longtable},
end table=\caption{#2}\end{longtable}
} % similar to manual for package pgfplotstable

\pgfplotstableset{columns/Channel/.style={string type}}
\pgfplotstableset{columns/Units/.style={string type}}
\pgfplotstableset{columns/Description/.style={string type,column type={p{6cm}}}}
\pgfplotstableread[col sep=comma]{#1}\strtable
%\tracingmacros=2\tracingcommands=2
\begin{center}
%\begin{longtable} % this bombs
%\captionof{table}{#2} % alternative way to try to get a caption in there using capt-of package
\pgfplotstabletypeset[
every first column/.style={string type,column type={@{}l|}},
    every even row/.style={before row={\rowcolor[gray]{0.9}}},
    every head row/.style={before row=\toprule,after row=\midrule\endhead}, % repeats header
    every last row/.style={after row=\bottomrule},
    ]\strtable
    % \end{longtable} % bombs
    \end{center}
    }

答案1

我试验了一段时间,发现

\pgfplotstableset{
begin table=\begin{longtable},
every first row/.append style={before row={%
    \caption{The caption}%
    \endfirsthead
    \multicolumn{3}{c}{{\bfseries \tablename\\
hetable{} -- continued from previous page}} \\
    \endhead
    }},
end table=\end{longtable}
} % similar to manual for package pgfplotstable

效果很好。添加debug到选项列表以查看日志文件中生成的输出列表。似乎\endfirstheadendhead宏将先前输入的行收集为模板并将它们复制到指定位置(比较 longtable 手册以了解详细信息)。

唯一特别的是将这些项目添加到 pgfplotstable 中的正确位置——在这里,我使用every first row/.append style={before row={}}工具来注入语句。请注意,\multicolumn语句需要列数。

相关内容