如何通过函数或宏自动生成表

如何通过函数或宏自动生成表

这应该是一个简单的问题,有一个简单的答案,但我在网上找不到与此相关的内容(作为一个 TeX 新手......)。

我正在尝试自动生成表格,这样我就可以避免一遍又一遍地复制粘贴表格代码。我正在使用包pgfplotstable读取数据并生成表格代码。表格列(名称、格式等)相同;变化的是数据。现在,每次我需要这个表时,我都会复制/粘贴以下内容:

\begin{table}[H]
\renewcommand\tabcolsep{2.5pt}
    \centering
    \pgfplotstabletypeset[
        header=has colnames,
        every head row/.style={before row=\toprule,after row=\midrule},
        every last row/.style={after row=\bottomrule},
        every nth row={6}{before row=\midrule},
        columns/0/.style={column name=$x$, int detect},
        columns/1/.style={column name=$y$, string type},
        columns/2/.style={column name={$z$, fixed, precision=1},
        ]{some_data.csv}
    \caption{some_caption}
    \label{tab:some_label}
\end{table}

有没有办法避免输入整个内容并创建某种函数,让我只指定要读取的数据?

谢谢!

答案1

您可以将所有内容放在一个宏命令 ( \TypesetTabla) 中。在此示例中,它使用 3 个参数:数据文件的名称、标题的文本和标签。

这里使用两个不同的数据集调用了两次命令。

\TypesetTabla{<data file>}{<caption text>}{<unique label>}

A

这是所使用的代码。

\documentclass[12pt,a4paper]{article}

\usepackage{booktabs} 
\usepackage{pgfplotstable} 

\begin{filecontents*}[overwrite]{some_dataI.dat}
    column1 column2 column3
    1 xx 3.1
    11 3 23.2 
    12 4 39.3 
    1 6  3.4 
    2 7 6.5 
    14 8 16.6 
    1123 cc 3.1
    11 0 23.2 
    16 2 39.3 
    1 bnm 3.4 
    2 5 6.5 
    14 ert 16.6 
\end{filecontents*}

\begin{filecontents*}[overwrite]{some_dataII.dat}
    column1 column2 column3
    5 mmm 7.1
    11 3 4.2 
    12 srt 39.3 
    6 6  3.4 
    2 7 6.5 
    234 wert 16.6 
    45 cc 3.1
    11 000 8.2 
    126 2 39.3 
    32 exc 12.4 
    2 5 6.5 
    144  ert 1100.6 
    345 nnn 39.3 
    12 wert 12.4 
    234 5 6.5 
    77  hyui 1100.6 
\end{filecontents*}

\newcommand{\TypesetTabla}[3]{%
    \begin{table}[ht!]
        \renewcommand\tabcolsep{2.5pt}
        \centering
        \pgfplotstableset{columns={column1,column2,column3}}
        \pgfplotstabletypeset[
        header=has colnames,
        every head row/.style={before row=\toprule,after row=\midrule},
        every last row/.style={after row=\bottomrule},
        every nth row={6}{before row=\midrule},
        columns/column1/.style={column name=$x$,int detect},
        columns/column2/.style={column name=$y$, string type},
        columns/column3/.style={column name=$z$,fixed, precision=1},        
        ]{#1}
        \caption{#2}
        \label{#3}
    \end{table}
}
\begin{document}
    
\TypesetTabla{some_dataI.dat}{some caption I}{tab:some_label}

\TypesetTabla{some_dataII.dat}{some other caption II}{tab:some_label2}
    
\end{document}

相关内容