如何使用 pgfplotstable 按名称自定义行?

如何使用 pgfplotstable 按名称自定义行?

我有一张桌子

Rank ITML  SDALF KISSME LDM   LMNN 
1    5.53  5.60  14.17  13.51 7.29 
5    18.89 23.45 48.54  40.73 21.00
10   29.96 36.09 52.57  52.13 32.06
20   44.20 51.96 70.53  70.81 48.94

我想要的结果就像

在此处输入图片描述

具体来说,我需要

  • 更改行名称以添加引用
  • 排成一行大胆的风格
  • \midrule在特定名称后面的一行中添加

在 中pgfplotstable,可以使用其名称轻松引用列。但我找不到像列一样轻松自定义行样式的解决方案。我可以使用一些解决方案来按pgfplotstabletranspose行制作表格,但第一列不被视为名称,而是字符串类型的数据列,结果如下图所示:

在此处输入图片描述

这样,该行就只能通过数字来引用。我可以像这样更改某一行的名称:

\pgfplotstabletranspose[string type, colnames from=Rank, input colnames to=Rank]\loadedtable{cuhk03-sota.txt}
\pgfplotstabletypeset[
   string type,
   every head row/.style={before row=\toprule, after row=\midrule},
   every last row/.style={after row=\hline},
   every row 0 column Rank/.style={/pgfplots/table/@cell content/.add={\relax}{\cite{davis2007information}},},
}{\loadedtable}

但这显然不是一个好办法。当我在中间添加一行时,下面的所有行号都必须更改!有没有好的方法来处理行名?

答案1

我不同意@JohnKormylo;) 问题不在于引用,而在于

· 破解head row在某些列中添加单词“排名”的方法:

every head row/.style={
typeset cell/.code={%% add the word 'Rank'...
\ifnum\pgfplotstablecol=\pgfplotstablecols%
\pgfkeyssetvalue{/pgfplots/table/@cell content}{Rank ##1\\}%
\else%
\ifnum\pgfplotstablecol=1%
\pgfkeyssetvalue{/pgfplots/table/@cell content}{##1 &}%
\else%
\pgfkeyssetvalue{/pgfplots/table/@cell content}{Rank ##1 &}%
\fi\fi%
}%%
},

· 另一方面,引用可以简单地通过使用来添加biblatex/biber
我们必须使用匹配的参考书目,然后

display columns/0/.style={
postproc cell content/.style={@cell content={##1 \cite{##1} }}
},

(或者可能是另一个“引用来源”;取决于标签的来源)。

· 全部一起:

在此处输入图片描述

% arara: pdflatex
% arara: biber
% arara: pdflatex
% arara: pdflatex

\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{ITML,
title     = {Citation of ITML},  
}
@book{SDALF,
title     = {Citation of SDALF},  
}
@book{KISSME,
title     = {Citation of KISSME},  
}
@book{LDM,
title     = {Citation of LDM},  
}
@book{LMNN,
title     = {Citation of LMNN},  
}
\end{filecontents}

\documentclass[border=5pt, varwidth]{standalone}
\usepackage{pgfplotstable}

\usepackage[style=numeric]{biblatex} 
\addbibresource{\jobname.bib}
\usepackage[colorlinks=true, citecolor=purple, pdfborder={0 0 0}]{hyperref}

\begin{document}
\pgfplotstableread[header=true]{
Rank ITML  SDALF KISSME LDM   LMNN 
1    5.53  5.60  14.17  13.51 7.29 
5    18.89 23.45 48.54  40.73 21.00
10   29.96 36.09 52.57  52.13 32.06
20   44.20 51.96 70.53  70.81 48.94
}\Actual

\textbf{\Large  Actual:} \pgfplotstabletypeset[string type]{\Actual} 
\bigskip

\pgfplotstableset{string type,
column type={>{\bfseries}c}, % bfseries for head row (1/2)
postproc cell content/.append style={% normalfont for cells (2/2)
/pgfplots/table/@cell content/.add={\fontseries{\seriesdefault}\selectfont}{}
},
%
every head row/.style={
before row=\hline, 
after row=\hline,
typeset cell/.code={%% add the word 'Rank'...
\ifnum\pgfplotstablecol=\pgfplotstablecols%
\pgfkeyssetvalue{/pgfplots/table/@cell content}{Rank ##1\\}%
\else%
\ifnum\pgfplotstablecol=1%
\pgfkeyssetvalue{/pgfplots/table/@cell content}{##1 &}%
\else%
\pgfkeyssetvalue{/pgfplots/table/@cell content}{Rank ##1 &}%
\fi\fi%
}%%
},
%
every last row/.style={
after row=\hline,
},
%
display columns/0/.style={% citations
postproc cell content/.style={@cell content={##1 \cite{##1} }},
column type=l,
},
}

\textbf{\Large Target:} \pgfplotstabletranspose[
colnames from=Rank,
input colnames to=Method,
]\Target{\Actual}
\pgfplotstabletypeset[]{\Target}

%\cite{ITML} 
\printbibliography[title=Citations]
\end{document}

相关内容