宏内 Pgfplotstable 的参数化列名

宏内 Pgfplotstable 的参数化列名

我对几个数据文件使用相同的表格格式,因此我编写了一个名为的宏\tableMacro

问题是:我需要在不同的表中包含不同的列。我想参数化columns={}的属性\pgfplotstabletypeset

\documentclass{article}
\usepackage{pgfplotstable}
% #1 name of data file
% #2 name of columns
\newcommand{\tableMacro}[2]{
    \pgfplotstableread{#1}\table
    \pgfplotstabletypeset[columns={ColA, ColB}]\table % This works, but
    %\pgfplotstabletypeset[columns={#2}]\table  % I need this line to work
}
\begin{document}
\tableMacro{table.txt}{ColA, ColB} % This works.
\def\colnames{ColA, ColB}
\tableMacro{table.txt}{\colnames} % However, I need this type of parameter passing
                                  % since there are several tables that 
                                  % include same set of columns
\end{document}

内容table.txt

ColA ColB
2   23.2
5   67.8
3   11.4

答案1

正如 Marc 所说,宏的内容在输入到键之前需要进行扩展。一个简单的方法是使用以下机制/.expand oncepgfkeys如果你将该字符串添加到columns键中,则该参数将在解释之前进行扩展一次:

\documentclass{article}
\usepackage{pgfplotstable}

\begin{filecontents}{table.txt}
ColA ColB
2   23.2
5   67.8
3   11.4
\end{filecontents}

\newcommand{\tableMacro}[2]{
    \pgfplotstableread{#1}\table
    \pgfplotstabletypeset[columns/.expand once={#2}]\table 
}
\begin{document}

\tableMacro{table.txt}{ColA, ColB} % This works.

\def\colnames{ColB,ColA,ColB}
\tableMacro{table.txt}{\colnames} % However, I need this type of parameter passing
                                  % since there are several tables that 
                                  % include same set of columns
\end{document}

相关内容