我希望在编译最终 PDF 后自动在新目录中复制一份。
作为我的工作流程的一部分,每篇文章(我的论文)(以及相关图片)都存储在自己的目录中。然后我将每个文件导入主文件作为合并论文。
我已经对 tex 文件本身执行了此操作(每天备份)。
我在每个文章 tex 文件的开头都有以下代码(基本上将现有的 tex 文件复制到备份目录并用今天的日期重命名,这样我就有了 tex 文件的历史记录):
\immediate\write18{mkdir \currfiledir backup}
\immediate\write18{cp '\currfiledir \currfilename' '\currfiledir backup/\currfilebase\string_\the\year-\the\month-\the\day .\currfileext'}
我想要类似的代码,将最终的 PDF 文件从主目录复制到每篇文章的目录中。类似这样(但这不起作用)。
\immediate\write18{cp \jobname.pdf \currfiledir\currfilebase.pdf}
提前致谢
答案1
相关(至少我认为):如何正确地‘制作’乳胶项目?和使用 makefile 创建 tar 存档
基本上,我会创建一个 Makefile,用来latexmk
处理文档构建,并tar
进行定期备份(任何版本控制系统都比更好tar
,但这个实际上没有学习曲线)。
生成文件:
.PHONY:MyDoc.pdf 全部干净 全部:MyDoc.pdf MyDoc.pdf: MyDoc.tex latexmk -pdf -pdflatex="pdflatex -interactive=nonstopmode" -use-make MyDoc.tex 干净的: latexmk-CA 备份: tar -czf ../MyDocs-`date + %Y.%m.%d`.tar.gz 。
答案2
本质上这个问题是TeX 可以对其生成的 PDF 进行后期处理吗?
解决方案改编自https://tex.stackexchange.com/a/648388/250119,使用wrapup_run
钩子。仅限 LuaLaTeX。
%! TEX program = lualatex
\documentclass{article}
\usepackage[abspath]{currfile}
\usepackage{luacode}
\begin{document}
123
\begin{luacode*}
luatexbase.add_to_callback("wrapup_run", function()
local output_file=token.get_macro("currfiledir")..token.get_macro("currfilebase")..".pdf"
print("======== Copying finalized PDF to "..output_file)
local outfile=io.open(output_file, "wb")
outfile:write(io.open(tex.jobname..".pdf", "rb"):read("a"))
outfile:close()
end, "final callback to copy pdf file")
\end{luacode*}
\end{document}
用 编译lualatex -recorder path/to/file.tex
。