解决方案 1. 滥用add_cus_dep

解决方案 1. 滥用add_cus_dep

我开始使用 latexmk 编译为 pdf。我使用的命令是

 latexmk -lualatex -jobname="LUA" -silent  index.tex

由于我的 latex 文件非常大,编译成 pdf 大约需要 4-6 小时(有些文件超过 60,000 页),每次需要运行 2-3 次。这里有一个示例运行,现在仍然运行了几个小时

latexmk -lualatex -jobname="LUA" -silent  index.tex
Rc files read:
  NONE
Latexmk: File-database 'LUA.fdb_latexmk' is of incompatible version, 3 v. current version 4
Latexmk: Run number 1 of rule 'lualatex'
This is LuaHBTeX, Version 1.15.1 (TeX Live 2023/dev) 
 restricted system commands enabled.
Latexmk: fls file doesn't appear to have been made.
Latexmk: Getting log file 'LUA.log'
Latexmk: Run number 2 of rule 'lualatex'
This is LuaHBTeX, Version 1.15.1 (TeX Live 2023/dev) 
 restricted system commands enabled.
Latexmk: fls file doesn't appear to have been made.
Latexmk: Getting log file 'LUA.log'
Latexmk: Run number 3 of rule 'lualatex'
This is LuaHBTeX, Version 1.15.1 (TeX Live 2023/dev) 
 restricted system commands enabled.

我的问题是:在开始下一次运行之前,是否可以对每次运行后生成的 pdf 文件进行备份,并将其命名为LUA_backup.pdf?(因为一旦开始新的运行,上次运行的 PDF 文件就会被自动删除)。

在此处输入图片描述

这样,我可以在等待最终版本完成时查看备份文件(即使它不是最终版本),这还要花几个小时吗?

我以前用自己的脚本时也这样做过,但现在我改用了,latexmk我不知道该怎么做。我查看了 Latexmk 选项,但没有看到,所以我想问问也许有,但我忽略了。

TL 2022

>latexmk --version
Latexmk, John Collins, 18 Nov. 2022. Version 4.78
>which latexmk
/usr/local/texlive/2022/bin/x86_64-linux/latexmk
>

答案1

解决方案 1. 滥用add_cus_dep

受到 PythonTeX 使用 的方法的启发add_cus_dep。将以下内容添加到.latexmkrc

sub backup_pdf{
    print("Backup the PDF $_[0].pdf -> $_[0]-backup.pdf\n");
    system("cp \"$_[0].pdf\" \"$_[0]-backup.pdf\"");
    #system("cp \"$_[0].synctex.gz\" \"$_[0]-backup.synctex.gz\"");  # optional
}
add_cus_dep('pdf', 'tex', 0, 'backup_pdf');

PythonTeX 文档的解释:

这是 add_cus_dep() 的一个稍微不典型的用法,即使不是“误用”。在标准用法中,第一个参数是文件的扩展名,用于通过第四个参数中命名的规则创建另一个具有第二个参数中给出的扩展名的文件。在这种情况下,我们只想在修改具有第一个扩展名的文件时运行该规则。第二个参数中给出的扩展名无关紧要,只要存在具有文档名称和该扩展名的文件即可。由于 tex 文件本身将存在,因此其扩展名是第二个参数的合理选择。


我尝试了其他一些解决方案,但都不起作用。

  • (虐待$pdf_update_command

    这个变量的实际用途是:

    $pdf_update_命令 [""]

    当设置 pdf 预览器通过运行命令进行更新时,这就是运行的命令。请参阅变量 $pdf_update_method 的信息。

    灵感来自https://gist.github.com/yig/dc648aef95e7a44217be

    尽管如此,它只在编译的最后运行。

  • 使用$compiling_cmd$failure_cmd、 等。

    也不起作用。

  • 使用extra_rules_spec

    下列的https://tex.stackexchange.com/a/685550/250119,我以为这样的事情会起作用,但事实并非如此。

    sub backup_pdf{
        print("Backup the PDF ($_[0].pdf)");
        system("cp \"$_[0].pdf\" \"$_[0]-backup.pdf\"");
    }
    
    
    $extra_rule_spec{'backup_pdf_rule'}  = [
        'internal',        # cmd_type
        '',                # ext_cmd
        'backup_pdf',      # int_cmd
        "%Z%R.pdf",        # '%Z for $out_dir1'
        "%Z%R-backup.pdf", # dest
        "%R",              # base ('%R = root = base for latex')
        1                  # needs_making
    ];
    

相关内容