在 \end{document} 之后执行 luacode,以在创建后重命名 pdf 文件

在 \end{document} 之后执行 luacode,以在创建后重命名 pdf 文件

我在用着拨动开关使用单个 tex 文件创建不同的输出。但是,我的输出 PDF 总是以生成的 tex 文件命名,例如,luaexample.tex生成luaexample.pdf

除了切换按钮之外,我现在想创建一个变量

\def\fileID{Z} 

它应该附加到文件名,例如luaexampleZ.pdf

我认为使用 lua 会是一个创建选项,并且实际上以下方法几乎有效:

\documentclass{article}
\usepackage{luacode}

\def\fileID{Z}

\begin{document}
A random number:
\begin{luacode}
tex.print(math.random())
\end{luacode}

\begin{luacode}
   os.remove("\jobname\fileID.pdf")
   os.rename("\jobname.pdf", "\jobname\fileID.pdf")
\end{luacode}

\end{document}

但因重命名而创建的 PDF \end{document}但出现lua代码部分。如果我编译该文档两次,它可以工作,但第一次编译的 PDF 会被重命名。我想避免这种双重编译。

如果我把lua代码放在后面\end{document}它是不会执行的。

那么,我怎样才能执行 lua 代码或一般的 latex 代码呢\end{document}

答案1

我认为您可以使用stop_run回调:

\documentclass{article}


\def\fileID{Z}

\begin{document}
A random number:


\directlua{
luatexbase.add_to_callback(
'stop_run',
function ()
 texio.write_nl("renaming output to " ..  "\jobname" .. "\fileID.pdf")
  os.rename("\jobname" .. ".pdf", "\jobname" .. "\fileID.pdf")
end,
"renamepdf"
)
}





\end{document}

相关内容