我写了一个 LuaLaTeX 文档,编译后会自动生成高中二次方程课程的问题和答案列表。细节很乱,但主要相关事实是这些都是随机生成的:每次编译时,我都会得到一个新的随机 pdf。
现在我想为每个学生编译一份这样的 pdf,但要按 TeXStudio 中的编译按钮 20 次,然后手动对文件进行编号等main1.pdf
,main2.pdf
这非常繁琐。有什么方法可以自动执行此过程吗?
为了拥有 MWE,你可以想象类似
%!TeX program = lualatex
\documentclass{article}
\usepackage{random}
\newcounter{\somenumber}
\begin{document}
\setrannum{\somenumber}{1}{2}
The number is \somenumber.
\end{document}
理想情况下,解决方案应该包含在 TeX 文件中,但如果不可能,我愿意接受替代方案(例如 bash 脚本?)。
答案1
您可以使用-jobname
选项lualatex
(以及pdflatex
或xelatex
)来更改所有输出文件的基本名称,不仅是生成的 PDF,还有log
-、aux
- 等文件。
如果你需要多次运行 LaTeX 甚至更多,比如biber
或makeindex
,你也可以使用latexmk
而不是lualatex
。latexmk
也理解选项-jobname
。 请参阅手册了解更多信息。
如何使用bash
或cmd.exe
或其他 shell 循环遍历数字,这不属于本文的主题。但作为替代方案,您可以使用lualatex
(或pdflatex
或xelatex
) 的 shell-escape 功能进行循环,例如:
% !TeX program = lualatex
\begin{filecontents*}[overwrite]{\jobname-document.tex}
\documentclass{article}
\begin{document}
This is \texttt{\jobname.pdf}.
\end{document}
\end{filecontents*}
\documentclass{article}
\usepackage{shellesc}
\newcounter{subdocument}
\makeatletter
\@whilenum \value{subdocument}<20\do
{%
\stepcounter{subdocument}%
\ShellEscape{%
latexmk -lualatex -jobname=\string"\jobname\thesubdocument\string" \string"\jobname-document\string"
}%
}
\makeatother
\begin{document}
\ifnum \ShellEscapeStatus = 1
See the generated files \texttt{\jobname1.pdf} \dots{}
\texttt{\jobname\thesubdocument.pdf}.
\else
Nothing generated. You have to use
\begin{quote}\ttfamily lualatex -shell-escape \jobname\end{quote}
to generate the files.
\fi
\end{document}