使 latexmk 4.54c 使用 synctex 和 xelatex

使 latexmk 4.54c 使用 synctex 和 xelatex

我通常希望 latexmk 默认使用 pdflatex 和 synctex,因此我在我的 RC 文件中有以下内容,并且一切运行正常:

$pdf_mode = 1;
$pdflatex = 'pdflatex -interaction=nonstopmode -synctex=1 %O %S';

但是,我想使用 xelatex 和 synctex 将某些文档编译为 PDF。如何更改我的 RC 文件,以便 latexmk 仍然默认使用 pdflatex 和 synctex,但如果我传递单个命令行选项,它将改用 xelatex 和 synctex?

我尝试了(以及许多其他方法)以下 RC 文件:

$pdf_mode = 1;
$pdflatex = 'pdflatex -interaction=nonstopmode -synctex=1 %O %S';
$xelatex = 'xelatex -interaction=nonstopmode -synctex=1 %O %S';

使用此文件,latexmk不带参数的调用仍可按预期工作,但运行latexmk -xelatexlatexmk -pdfxe抛出错误消息:

Latexmk: Log file says output to 'foo.pdf'
Latexmk: ===For rule 'xelatex', actual output 'foo.pdf'
       ======appears not to match expected output 'foo.xdv'
Failure to make 'foo.xdv'
Latexmk: Errors, so I did not complete making targets
Collected error summary (may duplicate other messages):
  xelatex: failed to create output file
Latexmk: Use the -f option to force complete processing,
 unless error was exceeding maximum runs of latex/pdflatex.

之前有关于此主题的类似帖子那里给出的解决方案仅适用于旧版本的 latexmk。根据作者的评论,程序的行为从那时起就发生了变化,并且 latexmk 现在应该“做你想做的事”,尽管我还没能弄清楚。

答案1

latexmk 拆分 xelatex 编译。来自文档

Latexmk 首先使用 xelatex 生成 xdv 文件,并执行所有需要的额外运行(包括 bibtex 等)。之后,它才使用 xdvipdfmx 从 xdv 文件生成 pdf 文件。

为了获得这种行为,变量的原始定义$xelatex包含-no-pdf开关:

# xelatex is used to give xdv file, not pdf file
$xelatex = 'xelatex -no-pdf %O %S';

如果您想改变变量,您也应该使用开关。

答案2

在 v4.54c 中,除了添加变量之外$xelatex,流程还更改为xelatex使用该标志运行,并且仅在作业结束时-no-pdf运行一次,这显然加快了编译时间。因此,当使用该标志运行时,需要输出。xdvipdfmx-xelatexlatexmkxdv

这里有几个选项:

  1. 将您的更改$xelatex$xelatex = -no-pdf -interaction=nonstopmode -synctex=1 %O %S
  2. 与您链接的问题中的答案没有什么不同,不要覆盖变量$xelatex,而是添加push @extra_xelatex_options, '-synctex=1' ;

相关内容