在根据 pgfplotstable 中的多个键进行排序Kind
,我手动添加了列。我需要在 latex 代码或另一个原始文本文件中定义列Mtx
与列之间的映射Kind
。也就是说,A
将映射到LP
,C
将映射到OPT
,等等。
这就像HashMap<String, String>
在 Java 中使用一样。
我在这里也包含了前面提到的问题中的 MWE,因为映射操作之后将使用以下排序方法:
\documentclass[a4paper]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\def\pgfplotsinvokeiflessthan#1#2#3#4{%
\pgfkeysvalueof{/pgfplots/iflessthan/.@cmd}{#1}{#2}{#3}{#4}\pgfeov
}%
\def\pgfplotsmulticmpthree#1#2#3#4#5#6\do#7#8{%
\pgfplotsset{string <}%
\pgfplotsinvokeiflessthan{#1}{#4}{%
% first key <:
#7%
}{%
\pgfplotsinvokeiflessthan{#4}{#1}{%
% first key >:
#8%
}{%
% first key ==:
\pgfplotsset{string <}%
\pgfplotsinvokeiflessthan{#2}{#5}{%
% second key <
#7%
}{%
\pgfplotsinvokeiflessthan{#5}{#2}{%
% second key >
#8%
}{%
% second key ==
\pgfplotsset{float <}%
\pgfplotsinvokeiflessthan{#3}{#6}{%
% third key <
#7%
}{%
% third key >=
#8%
}%
}%
}%
}%
}%
}%
\pgfplotstabletypeset[
create on use/sortkey/.style={
create col/assign/.code={%
\edef\entry{{\thisrow{Kind}}{\thisrow{Mtx}}{\thisrow{P}}}%
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
}
},
sort key=sortkey,
sort cmp={%
iflessthan/.code args={#1#2#3#4}{%
\edef\temp{#1#2}%
\expandafter\pgfplotsmulticmpthree\temp\do{#3}{#4}%
},
},
sort,
columns/Mtx/.style={string type},
columns/Kind/.style={string type},
]{
Mtx Kind P Sp
A LP 16 4.2
C OPT 16 72.5
A LP 64 20.3
B OPT 16 5.7
B OPT 64 16.4
A LP 256 90.4
}
\end{document}
答案1
\pgfkeys{/mtx/A/.initial={LP},/mtx/C/.initial={OPT}}
\pgfplotstablecreatecol[
create col/assign/.code={
\global\edef\entry{\pgfkeysvalueof{/mtx/\thisrow{MTXA}}}
\pgfkeyslet{/pgfplots/table/create col/next content}\entry
}]{Kind}\table