latexmk :清理自定义依赖项创建的多个文件

latexmk :清理自定义依赖项创建的多个文件

我正在使用用于从文件创建文件latexmk的自定义依赖项。.tex.svg

出现的问题是,转换实际上创建了两个文件,即该.tex文件和.pdf包含在该.tex文件中的文件。

据我了解,latexmk它不知道附加.pdf文件的存在,因此不会在清理期间删除它们。

我尝试通过为生成的额外文件添加特殊扩展名来规避这个问题.gen.pdf,并且

  • push @generated_exts, "gen.pdf";(a)使用或将此扩展添加到生成的扩展列表中
  • (b)将此扩展添加到要在清理中移除的额外扩展列表中$clean_ext = "gen.pdf";

但这些都不起作用。

有什么方法可以latexmk知道这些文件以便在清理过程中将其删除?

答案1

以下是定义自定义依赖项的解决方案。它包含对 OP 代码的一行补充:

$cleanup_includes_cusdep_generated = 1; 
$cleanup_includes_generated = 1;

add_cus_dep('gnplt', 'tex', 0, 'gnplt2tex');
sub gnplt2tex {
   $abs_path = File::Spec->rel2abs( $_[0] );
   rdb_add_generated( "$_[0].tex", "$_[0].gen.pdf" );
   ($vol, $dir, $fname) = File::Spec->splitpath($abs_path);
   system( "cd $dir && " .
    "gnuplot -e \"set output \'$fname.gen.tex\'\" \"$fname.gnplt\"" );
   system( "mv \"$abs_path.gen.tex\" \"$abs_path.tex\"" );
   system( "epstopdf \"$abs_path.gen.eps\" && rm \"$abs_path.gen.eps\"" );
}

关键部分是

  1. 设置$cleanup_includes_generated = 1,原帖作者已经设置过了。这确保清理操作会删除 内部保存的生成文件列表中的文件latexmk
  2. 使用(当前未记录的)rdb_add_generated子例程将特定文件添加到生成的文件列表中。这是我对 OP 代码的唯一更改。

$cleanup_includes_cusdep_generated = 1在 的当前版本中,的设置实际上是不必要的latexmk,但将来可能会改变。

警告

  1. 使用$cleanup_includes_generated = 1可能有点危险,因为它还意味着清理还包括删除在 latex 运行中在 .log 文件的行中latexmk找到的所有文件以及在 .fls 文件的行中找到的任何文件。这可能会导致行解析错误等。但您可以从 .fdb_latexmk 文件中的相关行中看到,生成文件的检测通常是可靠的。\openoutOUTPUT

  2. 在 的当前版本 (4.55e) 中latexmk,使用$cleanup_includes_generated = 1意味着使用-c选项的清理会latexmk删除一些应该保留的文件,即 生成的 .dvi 文件latex或 生成的 .pdf 文件pdflatex(等等)。这对于 选项无关紧要-C,因为据记录,该选项会导致删除这些文件。

相关内容