使用以下方法加速编译tikzexternalize:

使用以下方法加速编译tikzexternalize:

我有一篇文章,其中包含许多 TiZ 图片。为了使代码更清晰,节省编译时间,我想删除 Ti来自主文档的 Z 代码。我读到这可以通过 tikzlibrary“外部”实现。(例如参见这个问题
但是我不确定在哪里写哪些命令?

我在仅包含 tikz 图片代码的文件中要写什么?
为了导入图片,我在主文档中要写什么以及在哪里写?

答案1

您的帖子中隐藏着两个问题,它们有两个基本正交的答案:

使用以下方法加速编译tikzexternalize

实际上,您不必将它们写入单独的文件以节省编译时间。您可以几乎不改变代码,这就是它的美妙之处。这是使用外部化的最简单的设置

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=figures/] % activate and define figures/ as cache folder
\begin{document}
\begin{tikzpicture}  
    \node {real complex figure};
\end{tikzpicture}
\end{document}

这仅当你的 LaTeX 设置为使用 shell escape 运行时才会运行(pdflatex -synctex=1 -interaction=nonstopmode --shell-escape %.tex例如参见此处

通过编写 Ti 来获得整洁的代码Z 代码分成单独的文件:

当然,您也可以将\begin{tikzpicture}...\end{tikzpicture}代码存储在外部.tex.tikz文件中,然后使用\input它来包含它。但这只是个人喜好问题,并不影响编译性能。

你可以写

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=figures/]
\begin{document}
\input{tikzfigure1.tikz}
\end{document}

并变成tikzfigure1.tikz

\begin{tikzpicture}  
    \node {real complex figure};
\end{tikzpicture}

我倾向于定义自己的命令来包含tikz文件,而不是使用\input以便处理更多的事情:

\newcommand{\inputtikz}[1]{%
  \tikzsetnextfilename{#1}%
  \input{#1.tikz}%
}

这将确保外部化基于文件名(而不是顺序),这样如果您更改 Ti 的顺序,就不会感到困惑文档中的 Z 张图片。

答案2

我更喜欢手动方式来外部化 TikZ 图片。这样您可以完全控制,并且不需要任何 shell 转义。

  1. 将每个 TikZ 图像放在其自己的文件中(无论如何,这对于跟踪您的代码很有用)。使用此模板(例如 ext-img1.tex):

    \documentclass[tikz]{standalone}
    
    \usepackage{tikz}
    
    \begin{document}
    %
    \begin{tikzpicture}
      <your tikz code here>
    \end{tikzpicture}
    %
    \end{document}
    
  2. 将外部图像包含在主文档中:

    \begin{figure}
         \includegraphics{ext-img1.pdf}
         \caption{external image}
    \end{figure}
    
  3. 编译外部映像

    pdflatex ext-img1.tex
    
  4. 编译主文档

无论何时你想要修改图像,你都必须重建第一步中定义的文件。

相关内容