在 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
如问题中所述,问题是问题中给出的定义假设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")';
(请注意代码示例中的某些行很长,因此请滚动该框以查看所有代码。)
我有一个 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
如问题中所述,问题是问题中给出的定义假设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")';
(请注意代码示例中的某些行很长,因此请滚动该框以查看所有代码。)