批量重新编译不同名称的文件

批量重新编译不同名称的文件

我写了一个 LuaLaTeX 文档,编译后会自动生成高中二次方程课程的问题和答案列表。细节很乱,但主要相关事实是这些都是随机生成的:每次编译时,我都会得到一个新的随机 pdf。

现在我想为每个学生编译一份这样的 pdf,但要按 TeXStudio 中的编译按钮 20 次,然后手动对文件进行编号等main1.pdfmain2.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(以及pdflatexxelatex)来更改所有输出文件的基本名称,不仅是生成的 PDF,还有log-、aux- 等文件。

如果你需要多次运行 LaTeX 甚至更多,比如bibermakeindex,你也可以使用latexmk而不是lualatexlatexmk也理解选项-jobname。 请参阅手册了解更多信息。

如何使用bashcmd.exe或其他 shell 循环遍历数字,这不属于本文的主题。但作为替代方案,您可以使用lualatex(或pdflatexxelatex) 的 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}

笔记:您必须lualatex选择运行-shell-escape

相关内容