如何根据 TeX 引擎的 latexmk 命令行参数在 latexmkrc 中设置 $jobname?

如何根据 TeX 引擎的 latexmk 命令行参数在 latexmkrc 中设置 $jobname?

我有一个 pdfLaTeX/XeLaTeX 文件,iftex可以使用任一引擎进行编译。我想使用/或/选项latexmk来编译源代码。-pdf-pdflatex-pdfxe-xelatex

目标是获得具有不同名称<basename>-pdftex.pdf<basename>-xetex.pdf通过设置$jobname的PDF 输出latexmkrc。如何检查 latexmk 调用中使用的引擎选项?

似乎命令行选项未设置$pdf_mode。如果我调用latexmk -pdf,我仍然会得到$pdf_mode = 0。文档描述了变量$rule,但在使用时它未初始化latexmkrc

解决方案可以是设置-jobname/$pdflatex变量$xelatex,但我想要一种更通用的方法来修改目标变量:

if ($pdf_mode == 0) { $jobname = "%A-tex"; }
elsif ($pdf_mode == 1) { $jobname = "%A-pdftex"; }
elsif ($pdf_mode == 2) { $jobname = "%A-ps2pdf"; }
elsif ($pdf_mode == 3) { $jobname = "%A-dvipdf"; }
elsif ($pdf_mode == 4) { $jobname = "%A-luatex"; }
elsif ($pdf_mode == 5) { $jobname = "%A-xetex"; }
else { $jobname = "%A-UNKNOWN"; }

答案1

问题是,latexmkrc在执行命令行参数之前执行了代码。您需要在执行设置 pdfmode 的命令行选项之后执行某些操作。

我能看到的唯一方法latexmk是将代码放入另一个 rc 文件中,latexmkrc-jobname然后latexmk通过以下方式调用:

latexmk -pdflua -r latexmkrc-jobname file.tex

内容latexmkrc-jobname将是

if ($pdf_mode == 0) { $jobname = "%A-tex"; }
elsif ($pdf_mode == 1) { $jobname = "%A-pdftex"; }
elsif ($pdf_mode == 2) { $jobname = "%A-ps2pdf"; }
elsif ($pdf_mode == 3) { $jobname = "%A-dvipdf"; }
elsif ($pdf_mode == 4) { $jobname = "%A-luatex"; }
elsif ($pdf_mode == 5) { $jobname = "%A-xetex"; }
else { $jobname = "%A-UNKNOWN"; }

相关内容