在 xelatex 运行 使用 -no-pdf 参数后使用 latexmk 运行 命令,因此 pdf 没有损坏

Using latexmk run commands after xelatex is run using the -no-pdf argument so pdf not corrupted

我有一个 latexmkrc 文件,如下所示:

$xelatex = 'xelatex -interaction=nonstopmode  -synctex=1 %O %S; (sleep 10) && (test -f "%Z%R.synctex.gz") && (cp "%Z%R.synctex.gz" "%R.synctex.gz"); (test -f "%D") && (cp "%D" "%R.pdf")';
$pdflatex = 'pdflatex -interaction=nonstopmode -synctex=1 %O %S; (test -f "%Z%R.synctex.gz") && (cp "%Z%R.synctex.gz" "%R.synctex.gz"); (test -f "%D") && (cp "%D" "%R.pdf")';
$out_dir = '/tmp';

Latexmk 自动添加 -no-pdf 因为指定了 %O。如果是这种情况,那么在使用 xdvipdfmx 将扩展 dvi 转换为 pdf 之前,xelatex 命令之后的命令似乎是 运行。我的 .pdf 文件在本地文件夹中总是损坏,但如果我在 /tmp 文件夹中打开它,它就很好。使用 -no-pdf.

时,有没有办法在 xdvipdfmx 命令之后 运行 这些复制命令

这是最后发生的事情的图像。这是在上面的复制命令已经运行之后运行。复制的pdf文件总是损坏。

使用 latexmk 将您的文档 运行 在临时目录中,然后说服它将结果复制回您的工作文件夹似乎不必要地复杂化。我建议改用 ltx2any 。这是一个像latexmk一样的自动化工具,只是它的优点是它会默认使用一个临时文件夹并自动处理将pdf和synctex文件复制回来。

用法:

ltx2any -synctex -e xelatex filename

如问题中所述,问题是问题中给出的定义假设xelatexlatexmk用来制作pdf文件。实际上,latexmk安排xelatex制作一个xdv文件,然后调用xdvpdfmx将xdv文件制作成pdf文件。 (latexmk 这样做的原因是,对于图形密集型文档,如果需要多个 运行 的 xelatex,这可以大大缩短 运行 时间。)

一个合适的解决方案是重新定义 xdv 到 pdf 转换的命令如下

$xelatex = 'xelatex -synctex=1 -interaction=nonstopmode %O %S; (test -f "%Z%R.synctex.gz") && (cp "%Z%R.synctex.gz" "%R.synctex.gz")';
$xdvipdfmx = 'xdvipdfmx -o %D %S; (test -f "%D") && (cp "%D" "%R.pdf")';

(请注意代码示例中的某些行很长,因此请滚动该框以查看所有代码。)