清除自定义 latexmk 依赖项中的中间文件而不删除最终 PDF

清除自定义 latexmk 依赖项中的中间文件而不删除最终 PDF

我正在使用 latexmk 编译我的文档,并编写了一个自定义依赖规则来生成一些要包含的文件。处理涉及创建一些我想用 清理的中间文件-c。但是,只有当我设置 时才会删除这些中间文件$cleanup_includes_generated = 1;,这会导致输出 PDF 也被删除。

对于最小的工作示例,请使用以下latexmkrc文件,该文件只是将文件复制到中间目标,然后复制到最终目标。它使用rdb_add_generated()John Collins 在这个答案关于清理自定义依赖项。

$pdf_mode = 1;
$cleanup_includes_cusdep_generated = 1;

add_cus_dep('txt', 'inc', 0, 'test_dep');
sub test_dep {
    system("cp $_[0].txt $_[0].tmp");
    system("cp $_[0].tmp $_[0].inc");
    rdb_add_generated("$_[0].tmp");
}

使用简单的 TeX 文档main.tex

\documentclass{article}
\begin{document}
  \input{message.inc}
\end{document}

还有一个更简单的文件message.txt处理方法:

Hello world!

运行会创建一个包含中间文件的latexmk -interaction=nonstopmode文件数据库。但是,只删除该文件,保留中间文件。main.fdb_latexmkmessage.tmplatexmk -clatexmk -Cmessage.inc

在 latexmk 配置中更改$cleanup_includes_cusdep_generated = 1;$cleanup_includes_generated = 1;会导致中间文件被删除。但是,这会导致latexmk -c与 相同的行为latexmk -C并删除输出 PDF,这并不理想。

我怀疑rdb_add_generated()是将中间文件添加到了生成文件的一般列表中,而不是由自定义依赖项生成的文件列表中。有没有办法将其标记为自定义生成文件,或者我只能在保留中间文件不进行清理和删除所有生成文件之间做出选择?

答案1

这种行为实际上是由于 中的几个错误造成的latexmk。(a)如果您指定$cleanup_includes_cusdep_generated = 1;,则latexmk无法删除您指定的额外生成的文件。(b)如果您指定$cleanup_includes_generated = 1;,则在使用 时latexmk会删除不应该删除的文件(例如,一个文件) 。.pdflatexmk -c

我已在 的下一版本中修正了这个问题latexmk

相关内容