长表和具有多个数据文件的 pgfplotstable

长表和具有多个数据文件的 pgfplotstable

我有两个 csv 文件:namespgf.csv

Sl. No., Reg. No.,Name,Category,Group,Gate,Sponsored,Department
1,MS001,Ajay-D-Vimal Raj P,PY,OBC,--,No,Physics
2,MS002,Harish Kumar,PY,GE,GATE,Yes,Physics
3,MS003,Ajay-D-Vimal Raj P,PY,OBC,--,No,Physics
4,MS004,Harish Kumar,PY,GE,GATE,Yes,Physics

markspgf.csv

number,marks
MS001,67
MS002,25
MS003,62
MS004,55

要求:我想将第一个文件(namespgf.csv)打印成一个长表,其中包括的第二列(即标记列)markspgf.csv作为名称列之后的列(即第四列)。

这是 MWE(可以工作,但不是我想要的)

\documentclass[10pt]{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{longtable}
\usepackage{pgfplotstable}
\usepackage{array}
\usepackage{filecontents}
%
\begin{filecontents}{namespgf.csv}
Sl. No., Reg. No.,Name,Category,Group,Gate,Sponsored,Department
1,MS001,Ajay-D-Vimal Raj P,PY,OBC,--,No,Physics
2,MS002,Harish Kumar,PY,GE,GATE,Yes,Physics
3,MS003,Ajay-D-Vimal Raj P,PY,OBC,--,No,Physics
4,MS004,Harish Kumar,PY,GE,GATE,Yes,Physics
\end{filecontents}
%
\begin{filecontents}{markspgf.csv}
number,marks
MS001,67
MS002,25
MS003,62
MS004,55
\end{filecontents}
%
\begin{document}
% ----------------------------------------------------------------------%
\pgfplotstableread[col sep=comma]{namespgf.csv}\namespgf
\pgfplotstableread[col sep=comma]{markspgf.csv}\markspgf
\pgfkeys{/pgfplots/table/verb string type}
%
\pgfplotstableset{%
% header=true,
begin table=\begin{longtable},
every first row/.append style={before row={%
%  \caption{The caption}%
 \textbf{} & \textbf{Reg. No.} &  \multicolumn{1}{c|}{\textbf{Name}} &
 \multicolumn{1}{c|}{\textbf{Category}} & \multicolumn{1}{c|}{\textbf{Group}} & \textbf{GATE} & \textbf{Sponsored} &\textbf{Department} &\textbf{Marks} \\ \hline\hline
\endfirsthead%
%
\multicolumn{9}{c}%
{{\bfseries  Continued from previous page}} \\
\hline%
%
\textbf{} & \textbf{Reg. No.} & \multicolumn{1}{c|}{\textbf{Name}} &
\multicolumn{1}{c|}{\textbf{Category}} & \multicolumn{1}{c|}{\textbf{Group}}  & \textbf{GATE} & \textbf{Sponsored}&\textbf{Department} &\textbf{Marks} \\ \hline\hline
\endhead
%
\hline \multicolumn{9}{|r|}{{Continued on next page}} \\ \hline
\endfoot
%
\hline
\multicolumn{9}{|r|}{{Concluded}} \\ \hline
\endlastfoot
}},%
end table=\end{longtable},
column type/.add={|}{},
every last column/.style={%
column type/.add={}{|}},
columns/Name/.style={column type=|p{3cm},string type},
columns/Department/.style={column type=|l,string type},
every head row/.style={%
 before row=\hline,after row=\hline}
}%
%--------------------------------------------------------------------------
\pgfplotstablecreatecol[copy column from table={\markspgf}{[index] 1}] {marks} {\namespgf} 
%
{\footnotesize
\pgfplotstabletypeset[skip first n=1,outfile=pgfplotstable.multirow.out,%write it to file
]{\namespgf} %%% skip first n=1 NOT WORKING????
} %%% How to tell pgfplotstable not to print the headers from the csv file?
% ----------------------------------------------------------------------%
\end{document}

该代码的输出如下:

在此处输入图片描述

问题:

  1. 第一行是从我并不需要的文件中获取的(由pgfplots) 。如何告诉不要从文件中打印标题?(我自己在代码中给出)。namespgf.csvpgfplotstable

  2. 如何将该Marks列移动为旁边的第四列Names

希望我说得足够清楚。如果需要进一步说明,请告诉我。

答案1

原则上,percusse 的注释指向了正确的方向:第一个问题的答案是输出一个空的标题行。

为此,必须重新定义typeset cell,使其在 中生成一个空值@cell content。自从我阅读了 percusse 在其评论中链接的问题(在我意识到无法typeset cell在 内部重新定义 之后every head row),不稳定的开发人员版本改进了对此请求的支持。

下面的例子展示了如何使用当前稳定的 1.5.1 来解决它以及如何在即将推出的版本中解决它(见下文)。

第二个问题可以通过密钥来实现columns:它选择要打印哪些列 - 并且它还定义输出顺序。

这是一个(有点“更”简约)的例子,仅演示了这些键:

\documentclass{standalone}

\usepackage{pgfplotstable}

\pgfkeysifdefined{/pgfplots/table/output empty row/.@cmd}{
    % upcoming releases offer this more convenient option:
    \pgfplotstableset{
        empty header/.style={
          every head row/.style={output empty row},
        }
    }
}{
    % versions up to and including 1.5.1 need this:
    \pgfplotstableset{
        empty header/.style={
            typeset cell/.append code={%
                \ifnum\pgfplotstablerow=-1 %
                    \pgfkeyssetvalue{/pgfplots/table/@cell content}{}%
                \fi
            }
        }
    }
}

\begin{document}

\pgfplotstabletypeset[
  % suppress the header row 'col1 col2 col3':
  empty header,
  col sep=comma,
  columns/col1/.style={string type,column type=r},
  columns/col2/.style={string type,column type=l},
  columns/col3/.style={string type,column type=l},
  ]
{
    col1,col2,col3
    Col A,B,C
    The first column,E,F
}

\pgfplotstabletypeset[
  col sep=comma,
  % change ordering of cols:
  columns={col1,col3,col2},
  columns/col1/.style={string type,column type=r},
  columns/col2/.style={string type,column type=l},
  columns/col3/.style={string type,column type=l},
  ]
{
    col1,col2,col3
    Col A,B,C
    The first column,E,F
}
\end{document}

在此处输入图片描述

我定义了一种本地样式empty header,并根据是否output empty row定义添加了不同的实现(将在 1.5.1 之后的下一个版本中定义)。

相关内容