我正在使用用于从文件创建文件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\"" );
}
关键部分是
- 设置
$cleanup_includes_generated = 1
,原帖作者已经设置过了。这确保清理操作会删除 内部保存的生成文件列表中的文件latexmk
。 - 使用(当前未记录的)
rdb_add_generated
子例程将特定文件添加到生成的文件列表中。这是我对 OP 代码的唯一更改。
$cleanup_includes_cusdep_generated = 1
在 的当前版本中,的设置实际上是不必要的latexmk
,但将来可能会改变。
警告:
使用
$cleanup_includes_generated = 1
可能有点危险,因为它还意味着清理还包括删除在 latex 运行中在 .log 文件的行中latexmk
找到的所有文件以及在 .fls 文件的行中找到的任何文件。这可能会导致行解析错误等。但您可以从 .fdb_latexmk 文件中的相关行中看到,生成文件的检测通常是可靠的。\openout
OUTPUT
在 的当前版本 (4.55e) 中
latexmk
,使用$cleanup_includes_generated = 1
意味着使用-c
选项的清理会latexmk
删除一些应该保留的文件,即 生成的 .dvi 文件latex
或 生成的 .pdf 文件pdflatex
(等等)。这对于 选项无关紧要-C
,因为据记录,该选项会导致删除这些文件。