当启用“--shell-escape”时,如何使 pdfLaTeX 实现多线程?

当启用“--shell-escape”时,如何使 pdfLaTeX 实现多线程?

我正在使用\write18已启用(或--shell-escape)的外部化来编译一堆PGFplots。第一次运行需要很长时间,我注意到pdflatex仅在一个 CPU 核心上运行。有没有办法使用pdflatex多个核心?(至少在\write18启用时)

答案1

tikzexternalize中可以为每个生成单独的图片\begin{tikzpicture}...\end{tikzpicture}

  • \usepgfplotslibrary{external}让所有 pgf 图都在编译之外。

让 pdflatex 知道这些图片是用制作

  • \tikzexternalize[mode=list and make]让 tikz 知道我们会使用make。因为目前只有make支持多线程。

我懒得为每个 pgfplots 图形设置名称,所以我让系统完成。

  • external/system call为单个图片文件设置名称,否则 pdflatex 不知道应该设置什么文件名。(原始代码来自 tikz&pgf 包手册 2.10 版第 345 页。)

我的 tex 文件名为test.tex

    \documentclass{standalone}

    \usepackage{pgfplots} %use tikz based pgfplots
      \usepgfplotslibrary{external}
        \tikzexternalize[mode=list and make]
        \tikzset{external/system call={pdflatex \tikzexternalcheckshellescape
          -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}
        } % to let pdflatex work
    %% compile picture: pdflatex --shell-escape xxxxxxx.tex

    \begin{document}

    \begin{tikzpicture}
    \begin{axis}[ xlabel=$x$, ylabel={$f(x) = x^2 - x +4$} ] 
      \addplot {x^2 - x +4}; 
    \end{axis} 
    \end{tikzpicture}

    \begin{tikzpicture}
    \begin{loglogaxis}[xlabel=Cost,ylabel=Gain]
      \addplot[color=red,mark=x] coordinates 
      { (10,100) (20,150) (40,225) (80,340) (160,510) (320,765) (640,1150) };
    \end{loglogaxis}
    \end{tikzpicture}

    \end{document}

第一次编译后pdflatex,执行make -j 4 -f test.makefile4使用 4 个线程编译图片。

然后跑pdflatex第二次。

该选项--shell-escape在我的系统中也能正常工作。

我的系统是:

  1. Win 7(x64) + Miktex 2.9 + cygwin环境下的make
  2. Linux(x64)+Texlive2013+make

相关内容