我有一个由 pgfplotstable 生成的表,想要突出显示特定列数每行中的最大值。
这是一个简单的、完全虚构的例子,可以说明我的问题:
Car 1 Car 2 Car 3 Car 4
Engine Power(bhp) 300 200 350 250
Torque (Nm) 200 250 120 400
Dimensions Wheel base (cm) 250 200 240 220
Ground clearance ...
...
我想将除前两列之外的每一行中的最大值加粗。这是在表格中突出显示极值,其中有一个很好的解决方案,我正在尝试扩展它。(不幸的是,我无法向该主题添加评论,因为我刚刚加入 stackexchange)。
我从上一个线程中需要的代码是
\newcommand{\findmax}[3]{
\pgfplotstablevertcat{\datatable}{#1}
\pgfplotstablecreatecol[
create col/expr={%
\pgfplotstablerow
}]{rownumber}\datatable
\pgfplotstablesort[sort key={#2},sort cmp={float >}]{\sorted}{\datatable}%
\pgfplotstablegetelem{0}{rownumber}\of{\sorted}%
\pgfmathtruncatemacro#3{\pgfplotsretval}
\pgfplotstableclear{\datatable}
}
\pgfplotstableset{
highlight row max/.code 2 args={
\pgfmathtruncatemacro\rowindex{#2-1}
\pgfplotstabletranspose{\transposed}{#1}
\findmax{\transposed}{\rowindex}{\maxval}
\edef\setstyles{\noexpand\pgfplotstableset{
every row \rowindex\space column \maxval\noexpand/.style={
postproc cell content/.append style={
/pgfplots/table/@cell content/.add={$\noexpand\bf}{$}
},
}
}
}\setstyles
}
}
使用以下代码读取表格\pgfplotstableread{...}\data
,然后使用上述代码调用
\pgfplotstabletypeset[
highlight row max ={\data}{1},
highlight row max ={\data}{2},
highlight row max ={\data}{3},
...
]{\data}
如果此代码在我的示例中运行,则会失败,因为前两列不是用于比较的浮点数。我理解上述代码并尝试扩展它,但我不是 tex 专家。
我设法通过限制转置命令生成的列来获得非通用的解决方案:
pgfplotstabletranspose[columns={Car 1,Car 2,Car 3,Car 4}]{\transposed}{#1}
那么 \findmax 返回的列的索引只需增加以考虑偏移量。
我想要一种更通用的方法,可以适用于任何表格。我目前的想法是将转置表中任何非浮点数单元格的内容更改为 0。我目前无法找到这样做的方法。