这应该是一个简单的问题,有一个简单的答案,但我在网上找不到与此相关的内容(作为一个 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>}
这是所使用的代码。
\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}