1

我有一个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指定后自动添加。如果是这种情况,那么 xelatex 命令之后的命令似乎是在将扩展的 dvi 转换为 pdf 之前运行的xdvipdfmx。我的 .pdf 文件在本地文件夹中总是损坏,但如果我在 /tmp 文件夹中打开它就可以了。有没有办法xdvipdfmx在使用-no-pdf.

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

显示问题的命令行输出

4

2 回答 2

1

如问题中所述,问题在于问题中给出的定义假设xelatex用于latexmk制作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")';

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

于 2019-11-14T18:34:04.247 回答
0

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

用法:

ltx2any -synctex -e xelatex filename
于 2019-11-14T16:33:57.990 回答