我有两个 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}
该代码的输出如下:
问题:
第一行是从我并不需要的文件中获取的(由
pgfplots
) 。如何告诉不要从文件中打印标题?(我自己在代码中给出)。namespgf.csv
pgfplotstable
如何将该
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 之后的下一个版本中定义)。