tikz 外部:\tikzsetnextfilename 和 \tikzpicturedependsonfile

tikz 外部:\tikzsetnextfilename 和 \tikzpicturedependsonfile

考虑以下 MWE。如果\tikzpicturedependsonfile注释掉,代码将按预期运行。创建了,表明对A.dep的依赖关系。现在,让我们尝试将 tikz 源文件添加为依赖项。A.pdfA.datA.tikz

但是,如果\tikzpicturedependsonfile代码中包含了,那么\tikzsetnextfilename就不会产生任何效果,而是main-figure0.pdf会创建 来代替A.pdf

梅威瑟:

\documentclass{report}
\usepackage{tikz,tikzscale,pgfplots,pgfplotstable}
\pgfplotsset{compat=1.7}
\usetikzlibrary{external}
\tikzexternalize[mode=list and make]
%
\begin{filecontents}{A.tikz}
  \begin{tikzpicture}
    \begin{axis}
      \addplot [] table [header=false] {A.dat};
    \end{axis}
  \end{tikzpicture}
\end{filecontents}
%
\begin{filecontents}{A.dat}
  1 1 
  2 2 
\end{filecontents}
%
\begin{document}
  \newcommand{\figFilename}{}
  \renewcommand{\figFilename}{A}
  \tikzsetnextfilename{\figFilename}
  \tikzpicturedependsonfile{\figFilename.tikz}
  \input{\figFilename.tikz}
\end{document}

此活动的目的是将 的源文件 ( A.tikz)tikzpicture以及默认添加的数据文件 ( A.dat) 添加到依赖项中。一旦完成此操作,每次编辑 tikzpicture 时,它​​都会自动重新编译。

答案1

这是外部库中的一个错误(存在于 PGF 2.10 和 pgfplots 1.7 附带的副本中)。

我已经修复了它;它将包含在下一个 PGF 版本中。更新的副本也随 pgfplots 版本一起提供(前提是您说的\usepgfplotslibrary{external}是 tikz 版本)。

该错误的影响是“获取下一个文件名”会重置 (a) 已设置的值\tikzsetnextfilename和 (b) 的值export next

如果你等不及了,一个解决办法似乎是\tikzsetnextfilename 你的台词是\tikzpicturedependsonfile

答案2

原因与您的另一个问题相同(tikzscale 和 \tikzsetnextfilename 不能一起工作),每次调用 后,文件名都会被全局重置\tikzexternalgetnextfilename。在这种情况下,这样的调用是由 进行的\tikzpicturedependsonfile。这肯定是 TikZ 中的一个错误!

解决方法(\tikzpicturedependsonfile如果调用则重置名称\tikzexternalgetnextfilename):

\documentclass{report}
\usepackage{tikz,pgfplots,pgfplotstable}
\pgfplotsset{compat=1.7}
\usetikzlibrary{external}

\makeatletter
\def\tikzpicturedependsonfile@ACTIVE#1{%
    \begingroup
    \tikzexternalgetcurrentfilename\tikzpicturedependsonfile@name
    \ifx\tikzpicturedependsonfile@name\pgfutil@empty
        \tikzexternalgetnextfilename\tikzpicturedependsonfile@name
        \expandafter\tikzsetnextfilename\expandafter{\tikzpicturedependsonfile@name}
    \fi
    \expandafter\tikzexternalfiledependsonfile\expandafter{\tikzpicturedependsonfile@name}{#1}%
    \endgroup
}%
\makeatother

\tikzexternalize[mode=list and make]
%
\begin{filecontents}{A.tikz}
  \begin{tikzpicture}
    \begin{axis}
      \addplot [] table [header=false] {A.dat};
    \end{axis}
  \end{tikzpicture}
\end{filecontents}
%
\begin{filecontents}{A.dat}
  1 1 
  2 2 
\end{filecontents}
%
\begin{document}
  \newcommand{\figFilename}{}
  \renewcommand{\figFilename}{A}
  \tikzsetnextfilename{\figFilename}
  \tikzpicturedependsonfile{\figFilename.tikz}
  \input{\figFilename.tikz}
\end{document}

相关内容