如何使用不同的 CSV 输入文件对一个文档进行多次编译

如何使用不同的 CSV 输入文件对一个文档进行多次编译

我有以下文件:

\documentclass[a4paper,10pt]{article}
\usepackage{pgfplotstable, booktabs}

\pgfplotsset{compat=1.14}
\pagenumbering{gobble}

\begin{document}
\begin{center}

\pgfplotstabletypeset [
    col sep = comma,
    every head row/.style={before row=\toprule, after row=\midrule},
    every last row/.style={after row=\bottomrule},
    display columns/0/.style={string type}
    ]{csv1.csv}

\end{center}
\end{document}

它使用单独的文件 csv1.csv 作为输入来生成表格:

Name,Number
Daniel,1
Mary,2
Sarah,3

假设我有数百个 CSV 文件,我想为每个文件编译一个 PDF。我唯一需要更改的是文档中的csv1.csv

答案1

假设您的.tex文件名为mytable.tex,并且如下所示:

\ifdefined\mycsvfile
\else
    \def\mycsvfile{csv1.csv}
\fi
\documentclass[a4paper,10pt]{article}
\usepackage{pgfplotstable, booktabs}

\begin{document}
\begin{center}

\pgfplotstabletypeset [
    col sep = comma,
    every head row/.style={before row=\toprule, after row=\midrule},
    every last row/.style={after row=\bottomrule},
    display columns/0/.style={string type}
    ]{\mycsvfile}

\end{center}
\end{document}

那么您可以使用以下(Windows)批处理文件,bulkpdfs.bat

echo off

echo "batch compiling pdf files"
for %%f in (*.csv) do (
    echo compiling %%f ...
    pdflatex \def\mycsvfile{%%f}\input{mytable.tex} & copy mytable.pdf mytable%%~nf.pdf
)

pause

这将产生mytablecsv1.pdf,,mytablecsv2.pdf...

如需参考,请参阅一个.TEX 文件有两个pdf版本吗?

答案2

不确定上面的代码是一个简短的示例还是实际的文档(从您的措辞来看,我认为它是实际的)。

如果您有多个csv文件(对于此解决方案,必须使用 格式命名csv#.csv,其中#为数字),并且如果所有表格都适合一页而没有任何特殊问题,那么您可以使用循环将它们排版到每页。此答案显示了一个示例,但当然,实际应用可能会因表格的大小而异。

输出(单页)

1 在此处输入图片描述    2 在此处输入图片描述

代码

\documentclass[a4paper,10pt]{article}
\usepackage{pgfplotstable, booktabs}
\usepackage{filecontents}% just for this example
\usepackage{geometry}

\pgfplotsset{compat=1.13}
\pagenumbering{gobble}

% These two are just for this example. You should have external files anyway.
\begin{filecontents*}{csv1.csv}
Name,Number
Daniel,1
Mary,2
Sarah,3
\end{filecontents*}

\begin{filecontents*}{csv2.csv}
Name,Number
Jack,24
John,5
Matthew,32
\end{filecontents*}
%%%
\begin{document}
\foreach \x in {1,2}{% <-- if you have many csv, you can say e.g. {1,...,45}
    \pgfplotstabletypeset [
        col sep = comma,
        every head row/.style={before row=\toprule, after row=\midrule},
        every last row/.style={after row=\bottomrule},
        display columns/0/.style={string type}
        ]{csv\x.csv}%
    \newpage
}%
\end{document}

答案3

这里有一种操作方法:

\documentclass[a4paper,10pt]{article}
\usepackage{pgfplotstable, booktabs}

\pgfplotsset{compat=1.14}
\pagenumbering{gobble}

% Create your own command 
\newcommand\MyTable[1]{\pgfplotstabletypeset[
    col sep = comma,
    every head row/.style={before row=\toprule, after row=\midrule},
    every last row/.style={after row=\bottomrule},
    display columns/0/.style={string type}
    ]{#1.csv}\newpage
}

\begin{document}
\begin{center}

\MyTable{csv1}
\MyTable{csv2}

\end{center}
\end{document}

相关内容