latexmk:“未找到文件”,即使自定义依赖项应该添加它

latexmk:“未找到文件”,即使自定义依赖项应该添加它

我正在处理一个大型文档,其中包含多个技术组件的描述。我编写了几个宏,用于在 lualatex 编译文档期间触发“.uml”文件的自动创建。之后,这些文件可以传递给 plantUml,然后它会创建漂亮的“.png”图片,然后可以将其包含在文档中。所有这些都运行良好。

但是,我现在希望自动化这个过程,以便创建和包含图表不需要两次不同的 lualatex 调用,也不需要可能在“.tex”文件中添加“\includegraphics{}”。

为此,我尝试使用以下配置的 latexmk:

$pdflatex = 'lualatex %O %S ';
$pdf_mode = 1;
$postscript_mode = $dvi_mode = 0;

add_cus_dep('glo', 'gls', 0, 'run_makeglossaries');
add_cus_dep('acn', 'acr', 0, 'run_makeglossaries');
add_cus_dep('uml', 'png', 0, 'uml2png');

sub uml2png {
    system( "java -cp plantuml.jar  net.sourceforge.plantuml.Run -failfast2 -nbtread auto -charset UTF-8 -o . -v -tpng \"$_[0].uml\" \"$_[0].png\"" );
}

sub run_makeglossaries {
    if ( $silent ) {
        system( "makeglossaries -q \"$_[0]\"" );
    }
    else {
        system( "makeglossaries -q \"$_[0]\"" );
    };
}

push @generated_exts, 'uml', 'png';
push @generated_exts, 'glo', 'gls', 'glg';
push @generated_exts, 'acn', 'acr', 'alg';
   
$clean_ext .= ' %R.ist %R.xdy';

现在,当我尝试包含可以从“graph.uml”计算出来的“graph.png”时,“graph.uml”将在文档上第一次运行 lualatex 结束时创建,latexmk 中止告诉我该文件不存在。

为什么会发生这种情况? 如果我正确理解了 latexmk 的文档,则应该通过将“0”作为必需参数传递给来处理这种情况add_cus_dep(from, to, must, conv)

当然,当我提前创建所需的“uml”文件时,它们会正确转换,并且不会出现任何错误,但这缺乏自动化。调用lualatex -interaction=nonstopmode也可以,但也不是一种选择。

您能帮我找到其他解决方案或解释该行为吗?

提前致谢。

编辑: 我通过检查 uml 文件是否已经存在(使用IfFileExists)解决了该问题,即推迟包含生成的图形:

\newcommand{\generateDiagram}[1]{%
\IfFileExists{%
    #1.uml%
    }{%
    \begin{figure}%
        \includegraphics[width=\textwidth]{#1.png}%
    \end{figure}%
    }{%
    \typeout{Error. No file #1.}%
}%
}%

在第二次运行中,自定义依赖关系被正确解析,并从.uml 文件创建所需的图片。

我现在面临的问题是,如果文件没有存储在主目录中,latexmk 似乎无法解析我的自定义依赖项。更准确地说,我有以下结构:

MAIN
|- FOO (uml goes here)
|- BAR 

我调整了我的add_cus_dep,以便从 MAIN/FOO 读取数据并存储在 MAIN/BAR 中。现在,假设pic.uml在第一次运行中生成了一个,并且应该通过包含在第二次运行中\generateDiagram{pic}。Latexmk 停止并告诉我pic.png不存在(当然不存在),甚至没有查看依赖项。你能告诉我我哪里出错了吗?

相关内容