我正在尝试构建一个依赖于某些 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
。但是,它在我办公室使用的计算机上不起作用,该计算机上安装了latexmk
v4.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
:
只需删除带有 的行
add_input_ext
。即使在实现它的版本中latexmk
,也不需要使用 来add_input_ext
添加扩展,因为这已经是已配置为使用的pdf
输入扩展之一。latexmk
pdflatex
但请插入行
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
生成的输出文件类型的情况。但我忘记了该子程序已记录在案。也许我应该恢复。latex
pdflatex
add_input_ext
latexmk
具有可能的输入扩展名列表的原因是, \includegraphics
LaTeX 的宏可以在没有输入文件扩展名的情况下使用,然后pdflatex
查找具有特定扩展名的文件。当某个文件丢失时,错误消息是关于缺少没有扩展名的文件。 Latexmk
看到错误消息并且必须知道哪些扩展名是相关的,以便它可以尝试通过自定义依赖项来制作丢失的文件。默认扩展名在latex
和pdflatex
等之间不同。我制作了一个通用的方法来处理这个问题,记录内部使用的子例程和变量似乎很有用。原因是至少有两个标准包(graphics
和graphicx
)允许用户配置默认图形扩展列表,相应的用户配置latexmk
会很有用。