编辑

编辑

我写过论文课也可以在Github。我正在将它用于我的论文并希望包含几个 Tikz/PGFPlots。

当使用外部化库时,自动生成的图形包括标题页和前言,而不仅仅是 tikz 图形。

我最初的想法是,我的文档类设置为自动包含前置内容,而不管选项如何,并且 tikz 将仅使用该类来创建图像,但是现在看来 tikzexternalize 使用主文档中的选项。这导致前置内容包含在图中。

按预期工作

\documentclass[thesis]{./thesis-gwu}[2018/05/21]
\makeglossaries
\usepackage{pgfplots}
\usepackage{external}
\tikzexternalize
\begin{document}
\begin{figure}
    \centering
    \begin{tikzpicture}
    \begin{axis}
    \addplot {x^2}
    \end{axis}
    \end{tikzpicture}
    \caption{Externalized}
\end{figure}
\end{document}

然而,如果我加上前言(标题页),它就不再起作用了

\documentclass[thesis]{./thesis-gwu}[2018/05/21]
\showtitlepage
\makeglossaries
\usepackage{pgfplots}
\usepackage{external}
\tikzexternalize
\begin{document}
\begin{figure}
    \centering
    \begin{tikzpicture}
    \begin{axis}
    \addplot {x^2}
    \end{axis}
    \end{tikzpicture}
    \caption{Externalized}
\end{figure}
\end{document}

我创建了一个分支这里尝试调试这个问题,但没有成功。

谢谢你的建议

答案1

你的班级有例如

\AtBeginDocument{ %
  \titlepage %
  ...
}

你需要的是类似

\AtBeginDocument{% do not add spurious space!
  \tikzifexternalizing{}{\titlepage}%
  ...
}

或者,你可以“优化”相关命令,例如

\tikzset{%
    external/optimize command away=\titlepage{0},%
}

这显然可以在文档或类文件中完成。

顺便说一句,你想要类似的东西

\AtEndPreamble{%
    <code loading hyperref>
    <code loading cleveref>
}

以便人们可以在他们的序言中加载其他包。

编辑

如果你选择类路由,你需要确保它tikzifexternalizing被定义了。但是,你并不想要求人们使用,tikz如果他们不需要它的话。所以你可以这样做:

\AtBeginDocument{% do not add spurious space!
  \providecommand\tikzifexternalizing[2]{#2}%
  \tikzifexternalizing{}{\titlepage}%
  ...
}

如果命令已经定义,则不会有任何区别。如果没有,它将仅使用第二个参数\titlepage,即,这正是您想要的。由于您无法在之后加载包或库\begin{document},因此这允许人们使用tikz external或不使用,而不必强制每个使用该类的人加载此代码。

相关内容