add_input_ext 在 latexmk 的最新版本中生成错误

add_input_ext 在 latexmk 的最新版本中生成错误

我正在尝试构建一个依赖于某些 SVG 文件的文档。我希望将这些 SVG 文件转换为 PDF,然后将生成的 PDF 用作编译的输入。为此,我一直在使用latexmk,如下所示latexmkrc

sub svg2pdf {
   my $curdir = cwd();
   system("inkscape -D --export-pdf=\"$curdir/$_[0].pdf\" \"$curdir/$_[0].svg\"");
}
add_input_ext( 'latex', 'pdf' );
$pdf_mode = 1;
$pdflatex = 'pdflatex %O -synctex=1 -interaction=nonstopmode %S';

这在安装了 v4.41 的个人计算机上运行良好latexmk。但是,它在我办公室使用的计算机上不起作用,该计算机上安装了latexmkv4.65;我收到错误:

Latexmk: Initialization file 'latexmkrc' gave an error:
     Undefined subroutine &main::add_input_ext called at (eval 7) line 6, <GEN0> chunk 1.

Latexmk: Stopping because of problem with rc file

事实上,如果我删除latexmkrc仅包含以下行,我会得到同样的错误add_input_ext( 'latex', 'pdf' );

latexmk所以我的问题是:使用v4.65,获得我在 v4.41 中拥有的功能的最简单方法是什么latexmk?(或者,如果这是不可能的,那么最简单的工作流程是什么,可以实现使用这些 SVG 文件作为源构建文档的目标?)

答案1

Latexmk维护者在这里。)如何获得工作latexmkrc

  1. 只需删除带有 的行add_input_ext。即使在实现它的版本中latexmk,也不需要使用 来add_input_ext添加扩展,因为这已经是已配置为使用的pdf输入扩展之一。latexmkpdflatex

  2. 但请插入行

    add_cus_dep( 'svg', 'pdf', 0, 'svg2pdf' );
    

如果没有它,latexmk就不会知道要从文件pdf中生成丢失的文件svg。对于 4.41 版也是如此latexmk。由于 OP 的配置确实适用于该版本,因此推测该add_cus_dep行存在于实际的 中latexmkrc

尽管在这种情况下不需要add_input_ext,但问题确实表明文档中存在错误latexmk(在 v. 4.65 中),其中确实提到了这个子程序(以及一些不再存在的配置变量)。我将在下一个版本中更正文档。

add_input_ext子程序已被删除(在 v. 4.62 中),因为它的实现干扰了我所做的其他一些更改的最简单的实现。这些更改是为了自动处理文档使用来更改由或\pdfoutput生成的输出文件类型的情况。但我忘记了该子程序已记录在案。也许我应该恢复。latexpdflatexadd_input_ext

latexmk具有可能的输入扩展名列表的原因是, \includegraphicsLaTeX 的宏可以在没有输入文件扩展名的情况下使用,然后pdflatex查找具有特定扩展名的文件。当某个文件丢失时,错误消息是关于缺少没有扩展名的文件。 Latexmk看到错误消息并且必须知道哪些扩展名是相关的,以便它可以尝试通过自定义依赖项来制作丢失的文件。默认扩展名在latexpdflatex等之间不同。我制作了一个通用的方法来处理这个问题,记录内部使用的子例程和变量似乎很有用。原因是至少有两个标准包(graphicsgraphicx)允许用户配置默认图形扩展列表,相应的用户配置latexmk会很有用。

相关内容