我有一堆表格保存在单独的文件和文件夹中,这些表格已用主文件进行了编译,逐一注释了主文件中每个文件的名称,并繁琐地重命名生成的 PDF 输出。
几个月来我制作了一百多张表格。现在我想以不同的风格重新编译它们,所以我正在寻找一种自动化这个过程的方法。
以下是一次不成功的尝试,它基于本网站上的一些建议,特别是这个问题。
用文字总结一下我在下面的代码中尝试做的事情:
- 创建文件
a.tex
并b.tex
用作输入(这些是我的表格); - 定义一个命令将文件名存储为列表,
a
并且b
(无需自动文件命名); - 一个
foreach
循环(包pgffor
)来调用每个输入文件a.tex
以及b.tex
内部的基本文档头/前言(standalone
类)并用名称保存它temp.tex
; - 然后调用
\immediate\write18{pdflatex...
运行 pdflatextemp.tex
; - 预期输出是两个名为
a.pdf
和 的PDF 文件b.pdf
。我在启用的情况下运行它shell-escape
。
不用说,它不起作用,非常感谢您的帮助!
% !TeX TXS-program:compile = txs:///pdflatex/[--shell-escape]
\documentclass{article}
\usepackage{pgffor}% \foreach
\usepackage{filecontents}
\begin{filecontents*}{a.tex}
First file (a table without preamble)
\end{filecontents*}
\begin{filecontents*}{b.tex}
Second file (a table without preamble)
\end{filecontents*}
\newcommand*{\ListOfFiles}{a,b}
\foreach \x in \ListOfFiles{%
\begin{filecontents*}{temp.tex}%
\documentclass{standalone}%
%\usepackage{stylesforalltables}
\begin{document}%
\input{\x}
\end{document}%
\end{filecontents*}%
\immediate\write18{pdflatex -jobname=\x\space temp}
}%
答案1
您不能将其用作filecontents
另一个命令的参数。但您可以在单独的filecontents
环境中定义主文件。将其称为compileall.tex
(或其他)
\documentclass{article}
\usepackage{pgffor}% \foreach
\usepackage{filecontents}
\begin{filecontents*}{master.tex}
\documentclass{standalone}
%\usepackage{stylesforalltables}
\begin{document}
\input{\jobname}
\end{document}
\end{filecontents*}
\begin{filecontents*}{a.tex}
First file (a table without preamble)
\end{filecontents*}
\begin{filecontents*}{b.tex}
Second file (a table without preamble)
\end{filecontents*}
\newcommand*{\ListOfFiles}{a,b}
\foreach \x in \ListOfFiles{%
\immediate\write18{pdflatex -jobname=\x\space master}
}
\stop
master.tex
但是,按照上面的方法编写并从命令行执行会更简单(假设bash
)
for i in {a,b}; do pdflatex -jobname=$i master; done
答案2
这是一个解决方案(简单\write
)。
\documentclass{article}
\usepackage{pgffor}% \foreach
\usepackage{filecontents}
\begin{filecontents*}{a.tex}
First file (a table without preamble)
\end{filecontents*}
\begin{filecontents*}{b.tex}
Second file (a table without preamble)
\end{filecontents*}
\newcommand*{\ListOfFiles}{a,b}
\newwrite\temp
\foreach \x in \ListOfFiles{
\immediate\openout\temp=temp.tex
\immediate\write\temp{
\string\documentclass{standalone}
\string\begin{document}
\string\input{\x}
\string\end{document}
}
\immediate\closeout\temp
\immediate\write18{pdflatex -jobname=\x\space temp}
}%
\begin{document}
foo
\end{document}
或者(更短)使用\unexpanded
\immediate\write\temp{\unexpanded{%
\documentclass{standalone}
\begin{document}
\input{\jobname}
\end{document}}