平均能量损失

平均能量损失

我正在尝试通过并行尽可能多的任务以及在每次运行时尽可能少地重做工作来加快我的乳胶开发速度。

除其他事项外,我想使用选项list and make集将我的 tikz 图像外部化。这允许我使用 一次重新编译所有 tikz 图像make -j -f main.makefile

为了实现此目的,我使用以下 makefile(为了回答这个问题而进行了简化):

main.pdf: main.tex
   pdflatex -shell-escape -interaction=batchmode -draftmode -fmt=preamble main.tex
   make -j -s -f main.makefile
   pdflatex -shell-escape -interaction=batchmode main.tex

我在使用这种方法时遇到的一个问题是make -j -s -f main.makefile 总是重新编译全部图像,即使没有必要(当只有一些 tikz 图像甚至没有任何图像被更改时main.tex)。

由于 tikz 图像通常占用了我编译时间的大部分时间,这似乎非常浪费。

有办法解决这个问题吗?我认为对于 tikz 来说,只需将需要重建的图像写入makefile.

重要更新:

看起来好像list and make 除设置标志外(如我在 makefile 中所做的那样),它都能正常工作-fmt=preamble。但是,为了提高速度,我希望继续使用预编译的前言。有什么办法可以解决这个问题吗?

我的序言包含我的所有软件包内容和命令定义。\tikzexternalize\tikzset命令位于我的动态序言中。

平均能量损失

考虑以下目录结构:

.
|- main.tex      # this is the main document
|- preamble.tex  # this is the preamble document
  • preamble.tex包含所有静态内容:

    \documentclass[a4paper, titlepage]{article}
    
    \usepackage[dutch]{babel}
    \usepackage[babel]{microtype}
    \usepackage{hyperref}
    % ...
    \usepackage{tikz}
    \usepackage{pgfplots}
    
    % tikz and pgf library loading and settings
    \usetikzlibrary{external}
    \pgfplotsset{compat = newest }
    
    % package settings
    \hypersetup { 
       % ...
    }
    

    % ... \def\preambleloaded{-- 预编译前言已加载 --}

  • main.tex包含动态前言和文档:

    % load preamble if it wasn't precompiled
    \def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax}             
    
    \ifundefined{preambleloaded}
        \typeout{!! PRECOMILED PREAMBLE NOT LOADED --}\input{preamble.tex}
    \else
        \typeout{\preambleloaded}
    \fi
    
    % tikz external settings
    \tikzexternalize[
        optimize=true,
        % system call={pdflatex \tikzexternalcheckshellescape -halt-on-error -file-line-error -interaction=batchmode -jobname "\image" "\texsource"},
        % also works and is faster:
        system call={pdflatex \tikzexternalcheckshellescape -halt-on-error -file-line-error -interaction=batchmode -fmt=preamble -jobname "\image" "\texsource"},
        mode=list and make
    ]
    
    \begin{document}
        some text...
        % ...
    \end{document}
    

注意system calltikz 外部化的设置。

为了预编译前言,使用以下命令:

pdflatex -ini -shell-escape -interaction=batchmode -file-line-error -jobname="preamble" "&latex preamble.tex\dump" preamble.tex

要使用预编译fmt文件编译文档,我使用:

pdflatex      -shell-escape -interaction=batchmode -file-line-error -output-format=pdf -fmt=preamble main.tex

mwe 也可以下载来自 Dropbox

相关内容