感谢 Ulrike 和 Cfr,现在有一个可行的解决方案!
不过,我还是有点好奇是否可以用其他方式来实现。除了用 和 包围包含的图形之外,\tikzexternaldisable
还有其他方法\tikzexternalenable
可以确保 Beamer 主题图形不会被外部化吗?
我有一个自定义主题,其中在脚注中包含了一个徽标。
当我将 tikzexternalize 与主题一起使用时(我有时会这样做,但并非总是如此),除非我禁用外部化(\tikzexternaldisable
),否则徽标将被外部化。但是,如果我没有加载外部库(因为当时是未知命令),这将失败\tikzexternaldisable
。
我如何确保主题内容不被外部化?
此 MWE 将 footline 徽标外部化:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{external}
\makeatletter
\defbeamertemplate*{footline}{SomeName}[1][]%
{%
\begin{beamercolorbox}[wd=\paperwidth,ht=.1\paperheight,#1]{logo in foot}%
\tikzexternaldisable %fails if external isn't loaded
%^replacing with \csname tikzexternaldisable \endcsname has same effect as commenting the line out
\tikz\draw[fill=blue] (0,0) rectangle (.9286484375\paperwidth,.05\paperheight);
\tikzexternalenable %fails if external isn't loaded
%^replacing with \csname tikzexternalenable \endcsname has same effect as commenting the line out
\end{beamercolorbox}%
}
\makeatother
\tikzexternalize %Externalizes all images unless I disable and enable it in the beamertemplate
%Best would be if I could tell the externalize library to only externalize images in some of the layers of a beamer frame
\author{John Smith}
\begin{document}
\maketitle
\begin{frame}
\tikz\draw (0,0) circle (10cm);
\end{frame}
\end{document}
我希望有一些优雅的 beamer 或 tikz 命令/设置,在将图形插入主题时不需要额外的行。如果有什么不清楚的地方请告诉我!
答案1
一个非常简单的方法是添加
\AtBeginDocument{\providecommand\tikzexternaldisable{\relax}}
在您的序言中。如果您加载库,这将不会执行任何操作。如果您不加载,它将确保命令被成功定义为不执行任何操作。
其他选项包括,例如,告诉 TikZ 仅外部化您明确命名的图片,然后命名您想要外部化的图片。
或者您可以修改 Beamer 的模板设置/定义命令,但由于 Beamer 以多种方式使用各种命令,因此您需要追踪这可能会产生的影响。
我不完全清楚你为什么不想将主题图形外化,因为你没有说。(我原本以为这些是主要候选者。)