我正在使用 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_latexmk
message.tmp
latexmk -c
latexmk -C
message.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
会删除不应该删除的文件(例如,一个文件) 。.pdf
latexmk -c
我已在 的下一版本中修正了这个问题latexmk
。